in reply to Re^5: uncompress gzip data in a callback
in thread uncompress gzip data in a callback

Update: Added WindowBits(see below) and it now works fine! (Why is that not the default?)

Dodging all the issues of LWP configuration, Accept-Encodings etc. I tried this which is equivalent:

C:\test>gzip junk.htm C:\test>type junk38.pl #! perl -slw use strict; use Compress::Raw::Zlib; my $o = new Compress::Raw::Zlib::Inflate( ######### I forgot this. With it, it works perfectly.################# +####### WindowBits => WANT_GZIP_OR_ZLIB, ); binmode STDIN; while( read( STDIN, my $in, int( rand 1024 ) ) ) { my $st = $o->inflate( $in, my $out ); die "$st" unless $st == Z_OK; print $out; } C:\test>perl junk38.pl < junk.htm.gz data error at junk38.pl line 12.

And I always get 'data error'?


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
RIP an inspiration; A true Folk's Guy

Replies are listed 'Best First'.
Re^7: uncompress gzip data in a callback(Updated)
by pmqs (Friar) on May 04, 2010 at 18:52 UTC
    You've missed the WindowsBits option in the constructor and you should also test for Z_STREAM_END in the main loop.

    This is how I would write the loop.

    #! perl -slw use strict; use Compress::Raw::Zlib; my $o = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP ); binmode STDIN; my $status; while( read( STDIN, my $in, int( rand 1024 ) ) ) { $status = $o->inflate($in, my $out) ; print $out if $status == Z_OK or $status == Z_STREAM_END ; last if $status != Z_OK ; } die "inflation failed\n" unless $status == Z_STREAM_END ;