package IO::Compress::Zip ;
use strict ;
use warnings;
use bytes;
use IO::Compress::Base::Common 2.015 qw(:Status createSelfTiedObject);
use IO::Compress::RawDeflate 2.015 ;
use IO::Compress::Adapter::Deflate 2.015 ;
use IO::Compress::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::Compress::Adapter::Bzip2 ;
import IO::Compress::Adapter::Bzip2 2.015 ;
require IO::Compress::Bzip2 ;
import IO::Compress::Bzip2 2.015 ;
} ;
}
require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $ZipError);
$VERSION = '2.015';
$ZipError = '';
@ISA = qw(Exporter IO::Compress::RawDeflate);
@EXPORT_OK = qw( $ZipError zip ) ;
%EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ;
push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
$EXPORT_TAGS{zip_method} = [qw( ZIP_CM_STORE ZIP_CM_DEFLATE ZIP_CM_BZIP2 )];
push @{ $EXPORT_TAGS{all} }, @{ $EXPORT_TAGS{zip_method} };
Exporter::export_ok_tags('all');
sub new
{
my $class = shift ;
my $obj = createSelfTiedObject($class, \$ZipError);
$obj->_create(undef, @_);
}
sub zip
{
my $obj = createSelfTiedObject(undef, \$ZipError);
return $obj->_def(@_);
}
sub mkComp
{
my $self = shift ;
my $got = shift ;
my ($obj, $errstr, $errno) ;
if (*$self->{ZipData}{Method} == ZIP_CM_STORE) {
($obj, $errstr, $errno) = IO::Compress::Adapter::Identity::mkCompObject(
$got->value('Level'),
$got->value('Strategy')
);
}
elsif (*$self->{ZipData}{Method} == ZIP_CM_DEFLATE) {
($obj, $errstr, $errno) = IO::Compress::Adapter::Deflate::mkCompObject(
$got->value('CRC32'),
$got->value('Adler32'),
$got->value('Level'),
$got->value('Strategy')
);
}
elsif (*$self->{ZipData}{Method} == ZIP_CM_BZIP2) {
($obj, $errstr, $errno) = IO::Compress::Adapter::Bzip2::mkCompObject(
$got->value('BlockSize100K'),
$got->value('WorkFactor'),
$got->value('Verbosity')
);
*$self->{ZipData}{CRC32} = crc32(undef);
}
return $self->saveErrorString(undef, $errstr, $errno)
if ! defined $obj;
if (! defined *$self->{ZipData}{StartOffset}) {
*$self->{ZipData}{StartOffset} = 0;
*$self->{ZipData}{Offset} = new U64 ;
}
return $obj;
}
sub reset
{
my $self = shift ;
=1= |