谁有成功 解压 的方法?需要动态分配目标buffer的方法!!
int inflate_read(char *source,int len,char **dest,int gzip)
{
int ret;
unsigned have;
z_stream strm;
unsigned char out[2048];
int totalsize = 0;
/* allocate inflate state */
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
strm.avail_in = 0;
strm.next_in = Z_NULL;
if(gzip)
ret = inflateInit2(&strm, 47);
else
ret = inflateInit(&strm);
if (ret != Z_OK)
return ret;
strm.avail_in = len;
strm.next_in = (Bytef *)source;
/* run inflate() on input until output buffer not full */
do {
strm.avail_out = 2048;
strm.next_out = out;
ret = inflate(&strm, Z_NO_FLUSH);
assert(ret != Z_STREAM_ERROR); /* state not clobbered */
switch (ret)
{
case Z_NEED_DICT:
ret = Z_DATA_ERROR; /* and fall through */
case Z_DATA_ERROR:
case Z_MEM_ERROR:
inflateEnd(&strm);
return ret;
}
have = 2048 - strm.avail_out;
totalsize += have;
*dest = (char *)realloc(*dest, totalsize);
memcpy(*dest + totalsize - have, out, have);
} while (strm.avail_out == 0);
// free(*dest);
/* clean up and return */
(void)inflateEnd(&strm);
return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
}
我现在用这种方法,发现dest不停的分配之后,我不知道
1.怎么回收开辟的空间
因为这个函数需要不停的调用,请大家帮忙