Date: 2007-08-23 21:22:00
how to decompress gzip stream with zlib

I'm posting this in my journal because it trips me up every time I have to do this, and I need something googleable so I can easily find this info next time.

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.

Update: I've added this as a question (and answer!) on Stack Overflow: How can I decompress a gzip stream with zlib?

[info]taral
2007-09-04T01:54:05Z
...

OMG.
(anonymous) : Thanks for that...
2009-01-07T07:07:33Z
Thanks for that tip. i haven't seen it referenced anywhere else, but there's an indirect reference to it here:

http://zlib.net/zlib_faq.html#faq20

The question is "Well that's nice, but how do I make a gzip file in memory?", in case the numbering doesn't line up by the time that link is clicked.
(anonymous)
2009-10-19T08:19:58Z
very useful information. Thanks... :)
(anonymous) : Thank you
2010-05-10T21:20:56Z
Spent a half-a-day trying to figure this out... poor zlib documentation
[info]mifki
2011-10-19T12:58:26Z
thank you. so many years passed but this isn't documented anywhere (officially). that's odd.
Greg Hewgill <greg@hewgill.com>