X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FNNTPdeflate.pm;h=c143488f14bd9010bb174bd7736194719f3f302e;hb=d327141cee62b2efec2c859a237023d7ff9e71a5;hp=f2de0f381c470f6b8c616aa43aff424fae2c65cc;hpb=4b82e287358c9cd858456798c7f09881d2d274aa;p=public-inbox.git diff --git a/lib/PublicInbox/NNTPdeflate.pm b/lib/PublicInbox/NNTPdeflate.pm index f2de0f38..c143488f 100644 --- a/lib/PublicInbox/NNTPdeflate.pm +++ b/lib/PublicInbox/NNTPdeflate.pm @@ -56,7 +56,7 @@ sub enable { unlock_hash(%$self); $self->res('206 Compression active'); bless $self, $class; - $self->{zin} = [ $in, '' ]; + $self->{zin} = $in; } # overrides PublicInbox::NNTP::compressed @@ -67,13 +67,16 @@ sub do_read ($$$$) { my ($self, $rbuf, $len, $off) = @_; my $zin = $self->{zin} or return; # closed - my $deflated = \($zin->[1]); - my $r = PublicInbox::DS::do_read($self, $deflated, $len) or return; + my $doff; + my $dbuf = delete($self->{dbuf}) // ''; + $doff = length($dbuf); + my $r = PublicInbox::DS::do_read($self, \$dbuf, $len, $doff) or return; # assert(length($$rbuf) == $off) as far as NNTP.pm is concerned - # -ConsumeInput is true, so $deflated is automatically emptied - my $err = $zin->[0]->inflate($deflated, $rbuf); + # -ConsumeInput is true, so $dbuf is automatically emptied + my $err = $zin->inflate($dbuf, $rbuf); if ($err == Z_OK) { + $self->{dbuf} = $dbuf if $dbuf ne ''; $r = length($$rbuf) and return $r; # nothing ready, yet, get more, later $self->requeue;