BOOL gzip_encode_file(HANDLE hFile, WriteFunction fnDataCbk)
{
z_stream strm;
memset(&strm, 0, sizeof(strm));
int ret = deflateInit(&strm, Z_DEFAULT_COMPRESSION);
if (ret != Z_OK) {
return FALSE;
}
DWORD dwRead = 0;
int flush;
unsigned int have;
byte in[nCHUNK];
byte out [nCHUNK];
do
{
BOOL bSuccRead = 0;
strm.avail_in = fread(hFile, in, nCHUNK, &bSuccRead);
if (!bSuccRead) {
deflateEnd(&strm);
return FALSE;
}
flush = feof(hFile) ? Z_FINISH : Z_SYNC_FLUSH;
strm.next_in = in;
/* run deflate() on input until input aval is 0, finish
compression if all of source has been read in */
do {
strm.avail_out = nCHUNK;
strm.next_out = out;
ret = deflate(&strm, flush); /* no bad return value */
assert(ret != Z_STREAM_ERROR); /* state not clobbered */
have = nCHUNK - strm.avail_out;
{
if (fnDataCbk(out, have) != have)
{
deflateEnd(&strm);
return FALSE;
}
}
} while (strm.avail_in > 0);
assert(strm.avail_in == 0); /* all input will be used */
/* done when last data in file processed */
} while (flush != Z_FINISH);
assert(ret == Z_STREAM_END); /* stream will be complete */
/* clean up and return */
deflateEnd(&strm);
return TRUE;
}
gzip 编码一个文件
最新推荐文章于 2024-11-08 15:01:00 发布