unless $got->value('Bufsize') >= 1;
my $status = 0 ;
my $obj ;
($obj, $status) = Compress::Raw::Zlib::_inflateInit(FLAG_CONSUME_INPUT,
$got->value('WindowBits'),
$got->value('Bufsize'),
$got->value('Dictionary')) ;
my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldInflate" : undef) ;
wantarray ? ($x, $status) : $x ;
}
package Zlib::OldDeflate ;
our (@ISA);
@ISA = qw(Compress::Raw::Zlib::deflateStream);
sub deflate
{
my $self = shift ;
my $output ;
my $status = $self->SUPER::deflate($_[0], $output) ;
wantarray ? ($output, $status) : $output ;
}
sub flush
{
my $self = shift ;
my $output ;
my $flag = shift || Compress::Zlib::Z_FINISH();
my $status = $self->SUPER::flush($output, $flag) ;
wantarray ? ($output, $status) : $output ;
}
package Zlib::OldInflate ;
our (@ISA);
@ISA = qw(Compress::Raw::Zlib::inflateStream);
sub inflate
{
my $self = shift ;
my $output ;
my $status = $self->SUPER::inflate($_[0], $output) ;
wantarray ? ($output, $status) : $output ;
}
package Compress::Zlib ;
use IO::Compress::Gzip::Constants 2.015 ;
sub memGzip($)
{
my $out;
# if the deflation buffer isn't a reference, make it one
my $string = (ref $_[0] ? $_[0] : \$_[0]) ;
$] >= 5.008 and (utf8::downgrade($$string, 1)
or croak "Wide character in memGzip");
IO::Compress::Gzip::gzip($string, \$out, Minimal => 1)
or return undef ;
return $out;
}
sub _removeGzipHeader($)
{
my $string = shift ;
return Z_DATA_ERROR()
if length($$string) < GZIP_MIN_HEADER_SIZE ;
my ($magic1, $magic2, $method, $flags, $time, $xflags, $oscode) =
unpack ('CCCCVCC', $$string);
return Z_DATA_ERROR()
unless $magic1 == GZIP_ID1 and $magic2 == GZIP_ID2 and
$method == Z_DEFLATED() and !($flags & GZIP_FLG_RESERVED) ;
substr($$string, 0, GZIP_MIN_HEADER_SIZE) = '' ;
# skip extra field
if ($flags & GZIP_FLG_FEXTRA)
{
return Z_DATA_ERROR()
if length($$string) < GZIP_FEXTRA_HEADER_SIZE ;
my ($extra_len) = unpack ('v', $$string);
$extra_len += GZIP_FEXTRA_HEADER_SIZE;
return Z_DATA_ERROR()
if length($$string) < $extra_len ;
substr($$string, 0, $extra_len) = '';
=5= |