package IO::Uncompress::Gunzip ;
require 5.004 ;
# for RFC1952
use strict ;
use warnings;
use bytes;
use IO::Uncompress::RawInflate 2.015 ;
use Compress::Raw::Zlib 2.015 qw( crc32 ) ;
use IO::Compress::Base::Common 2.015 qw(:Status createSelfTiedObject);
use IO::Compress::Gzip::Constants 2.015 ;
use IO::Compress::Zlib::Extra 2.015 ;
require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $GunzipError);
@ISA = qw( Exporter IO::Uncompress::RawInflate );
@EXPORT_OK = qw( $GunzipError gunzip );
%EXPORT_TAGS = %IO::Uncompress::RawInflate::DEFLATE_CONSTANTS ;
push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
Exporter::export_ok_tags('all');
$GunzipError = '';
$VERSION = '2.015';
sub new
{
my $class = shift ;
$GunzipError = '';
my $obj = createSelfTiedObject($class, \$GunzipError);
$obj->_create(undef, 0, @_);
}
sub gunzip
{
my $obj = createSelfTiedObject(undef, \$GunzipError);
return $obj->_inf(@_) ;
}
sub getExtraParams
{
use IO::Compress::Base::Common 2.015 qw(:Parse);
return ( 'ParseExtra' => [1, 1, Parse_boolean, 0] ) ;
}
sub ckParams
{
my $self = shift ;
my $got = shift ;
# gunzip always needs crc32
$got->value('CRC32' => 1);
return 1;
}
sub ckMagic
{
my $self = shift;
my $magic ;
$self->smartReadExact(\$magic, GZIP_ID_SIZE);
*$self->{HeaderPending} = $magic ;
return $self->HeaderError("Minimum header size is " .
GZIP_MIN_HEADER_SIZE . " bytes")
if length $magic != GZIP_ID_SIZE ;
return $self->HeaderError("Bad Magic")
if ! isGzipMagic($magic) ;
*$self->{Type} = 'rfc1952';
return $magic ;
}
sub readHeader
{
my $self = shift;
my $magic = shift;
return $self->_readGzipHeader($magic);
}
sub chkTrailer
{
my $self = shift;
my $trailer = shift;
# Check CRC & ISIZE
my ($CRC32, $ISIZE) = unpack("V V", $trailer) ;
=1= |