To decompress a gzip format file with zlib, call inflateInit2
with the windowBits
parameter as 16+MAX_WBITS
, like this:
inflateInit2(&stream, 16+MAX_WBITS);
If you don’t do this, zlib will complain about a bad stream format. By default, zlib creates streams with a zlib header, and on inflate does not recognise the different gzip header unless you tell it so. Although this is documented starting in version 1.2.1 of the zlib.h
header file, it is not in the zlib manual. From the header file:
windowBits
can also be greater than 15 for optional gzip decoding. Add
32 towindowBits
to enable zlib and gzip decoding with automatic header
detection, or add 16 to decode only the gzip format (the zlib format will
return aZ_DATA_ERROR
). If a gzip stream is being decoded,strm->adler
is
a crc32 instead of an adler32.