开发背景
在android ndk环境下使用libcurl发起http请求,不巧的是,当前使用的libcurl编译时没有包含zlib模块,导致无法解压gzip数据。
考虑到ndk自带zlib包,可以使用zlib手动解压gzip数据,避免再次编译libcurl。
源码实现
(1)使用zlib解压gz数据
int gzDecompress(const char *src, int srcLen, const char *dst, int* dstLen){
z_stream strm;
strm.zalloc = NULL;
strm.zfree = NULL;
strm.opaque = NULL;
strm.avail_in = srcLen;
strm.avail_out = *dstLen;
strm.next_in = (Bytef *)src;
strm.next_out = (Bytef *)dst;
int err = -1;
err = inflateInit2(&strm, MAX_WBITS + 16); /*zlib解压gz数据*/
if (err == Z_OK){
err = inflate(&strm, Z_FINISH);
if (err == Z_STREAM_END){
*dstLen = strm.total_out; /* 解压成功 */
} else{
inflateEnd(&strm); /* 解压失败 */
return err;
}
} else{
inflateEnd(&strm); /* 解压初始化失败 */
return err;
}
infla