package IO::Uncompress::Unzip;
require 5.004 ;
# for RFC1952
use strict ;
use warnings;
use bytes;
use IO::Uncompress::RawInflate 2.015 ;
use IO::Compress::Base::Common 2.015 qw(:Status createSelfTiedObject);
use IO::Uncompress::Adapter::Inflate 2.015 ;
use IO::Uncompress::Adapter::Identity 2.015 ;
use IO::Compress::Zlib::Extra 2.015 ;
use IO::Compress::Zip::Constants 2.015 ;
use Compress::Raw::Zlib 2.015 qw(crc32) ;
BEGIN
{
eval { require IO::Uncompress::Adapter::Bunzip2 ;
import IO::Uncompress::Adapter::Bunzip2 } ;
}
require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $UnzipError, %headerLookup);
$VERSION = '2.015';
$UnzipError = '';
@ISA = qw(Exporter IO::Uncompress::RawInflate);
@EXPORT_OK = qw( $UnzipError unzip );
%EXPORT_TAGS = %IO::Uncompress::RawInflate::EXPORT_TAGS ;
push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
Exporter::export_ok_tags('all');
%headerLookup = (
ZIP_CENTRAL_HDR_SIG, \&skipCentralDirectory,
ZIP_END_CENTRAL_HDR_SIG, \&skipEndCentralDirectory,
ZIP64_END_CENTRAL_REC_HDR_SIG, \&skipCentralDirectory64Rec,
ZIP64_END_CENTRAL_LOC_HDR_SIG, \&skipCentralDirectory64Loc,
ZIP64_ARCHIVE_EXTRA_SIG, \&skipArchiveExtra,
ZIP64_DIGITAL_SIGNATURE_SIG, \&skipDigitalSignature,
);
sub new
{
my $class = shift ;
my $obj = createSelfTiedObject($class, \$UnzipError);
$obj->_create(undef, 0, @_);
}
sub unzip
{
my $obj = createSelfTiedObject(undef, \$UnzipError);
return $obj->_inf(@_) ;
}
sub getExtraParams
{
use IO::Compress::Base::Common 2.015 qw(:Parse);
return (
# # Zip header fields
'Name' => [1, 1, Parse_any, undef],
# 'Streaming' => [1, 1, Parse_boolean, 1],
);
}
sub ckParams
{
my $self = shift ;
my $got = shift ;
# unzip always needs crc32
$got->value('CRC32' => 1);
*$self->{UnzipData}{Name} = $got->value('Name');
return 1;
}
sub mkUncomp
{
my $self = shift ;
my $got = shift ;
my $magic = $self->ckMagic()
or return 0;
*$self->{Info} = $self->readHeader($magic)
or return undef ;
return 1;
=1= |