package IO::Uncompress::Inflate ;
# for RFC1950
use strict ;
use warnings;
use bytes;
use IO::Compress::Base::Common 2.015 qw(:Status createSelfTiedObject);
use IO::Compress::Zlib::Constants 2.015 ;
use IO::Uncompress::RawInflate 2.015 ;
require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $InflateError);
$VERSION = '2.015';
$InflateError = '';
@ISA = qw( Exporter IO::Uncompress::RawInflate );
@EXPORT_OK = qw( $InflateError inflate ) ;
%EXPORT_TAGS = %IO::Uncompress::RawInflate::DEFLATE_CONSTANTS ;
push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
Exporter::export_ok_tags('all');
sub new
{
my $class = shift ;
my $obj = createSelfTiedObject($class, \$InflateError);
$obj->_create(undef, 0, @_);
}
sub inflate
{
my $obj = createSelfTiedObject(undef, \$InflateError);
return $obj->_inf(@_);
}
sub getExtraParams
{
return ();
}
sub ckParams
{
my $self = shift ;
my $got = shift ;
# gunzip always needs adler32
$got->value('ADLER32' => 1);
return 1;
}
sub ckMagic
{
my $self = shift;
my $magic ;
$self->smartReadExact(\$magic, ZLIB_HEADER_SIZE);
*$self->{HeaderPending} = $magic ;
return $self->HeaderError("Header size is " .
ZLIB_HEADER_SIZE . " bytes")
if length $magic != ZLIB_HEADER_SIZE;
#return $self->HeaderError("CRC mismatch.")
return undef
if ! $self->isZlibMagic($magic) ;
*$self->{Type} = 'rfc1950';
return $magic;
}
sub readHeader
{
my $self = shift;
my $magic = shift ;
return $self->_readDeflateHeader($magic) ;
}
sub chkTrailer
{
my $self = shift;
my $trailer = shift;
my $ADLER32 = unpack("N", $trailer) ;
*$self->{Info}{ADLER32} = $ADLER32;
return $self->TrailerError("CRC mismatch")
if *$self->{Strict} && $ADLER32 != *$self->{Uncomp}->adler32() ;
return STATUS_OK;
}
sub isZlibMagic
=1= |