|
Packit |
d03632 |
package CompTestUtils;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
package main ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
use strict ;
|
|
Packit |
d03632 |
use warnings;
|
|
Packit |
d03632 |
use bytes;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#use lib qw(t t/compress);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
use Carp ;
|
|
Packit |
d03632 |
#use Test::More ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub title
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
#diag "" ;
|
|
Packit |
d03632 |
ok(1, $_[0]) ;
|
|
Packit |
d03632 |
#diag "" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub like_eval
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
like $@, @_ ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
BEGIN {
|
|
Packit |
d03632 |
eval {
|
|
Packit |
d03632 |
require File::Temp;
|
|
Packit |
d03632 |
} ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
package LexFile ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
our ($index);
|
|
Packit |
d03632 |
$index = '00000';
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub new
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $self = shift ;
|
|
Packit |
d03632 |
foreach (@_)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
Carp::croak "NO!!!!" if defined $_;
|
|
Packit |
d03632 |
# autogenerate the name if none supplied
|
|
Packit |
d03632 |
$_ = "tst" . $$ . "X" . $index ++ . ".tmp"
|
|
Packit |
d03632 |
unless defined $_;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
chmod 0777, @_;
|
|
Packit |
d03632 |
for (@_) { 1 while unlink $_ } ;
|
|
Packit |
d03632 |
bless [ @_ ], $self ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub DESTROY
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $self = shift ;
|
|
Packit |
d03632 |
chmod 0777, @{ $self } ;
|
|
Packit |
d03632 |
for (@$self) { 1 while unlink $_ } ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
package LexDir ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
use File::Path;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
our ($index);
|
|
Packit |
d03632 |
$index = '00000';
|
|
Packit |
d03632 |
our ($useTempFile);
|
|
Packit |
d03632 |
our ($useTempDir);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub new
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $self = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if ( $useTempDir)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
foreach (@_)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
Carp::croak "NO!!!!" if defined $_;
|
|
Packit |
d03632 |
$_ = File::Temp->newdir(DIR => '.');
|
|
Packit |
d03632 |
# Subsequent manipulations assume Unix syntax, metacharacters, etc.
|
|
Packit |
d03632 |
if ($^O eq 'VMS')
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$_->{DIRNAME} = VMS::Filespec::unixify($_->{DIRNAME});
|
|
Packit |
d03632 |
$_->{DIRNAME} =~ s/\/$//;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
bless [ @_ ], $self ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
elsif ( $useTempFile)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
foreach (@_)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
Carp::croak "NO!!!!" if defined $_;
|
|
Packit |
d03632 |
$_ = File::Temp::tempdir(DIR => '.', CLEANUP => 1);
|
|
Packit |
d03632 |
# Subsequent manipulations assume Unix syntax, metacharacters, etc.
|
|
Packit |
d03632 |
if ($^O eq 'VMS')
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$_ = VMS::Filespec::unixify($_);
|
|
Packit |
d03632 |
$_ =~ s/\/$//;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
bless [ @_ ], $self ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
else
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
foreach (@_)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
Carp::croak "NO!!!!" if defined $_;
|
|
Packit |
d03632 |
# autogenerate the name if none supplied
|
|
Packit |
d03632 |
$_ = "tmpdir" . $$ . "X" . $index ++ . ".tmp" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
foreach (@_)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
rmtree $_, {verbose => 0, safe => 1}
|
|
Packit |
d03632 |
if -d $_;
|
|
Packit |
d03632 |
mkdir $_, 0777
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
bless [ @_ ], $self ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub DESTROY
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
if (! $useTempFile)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $self = shift ;
|
|
Packit |
d03632 |
foreach (@$self)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
rmtree $_, {verbose => 0, safe => 1}
|
|
Packit |
d03632 |
if -d $_ ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub readFile
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $f = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @strings ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if (IO::Compress::Base::Common::isaFilehandle($f))
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $pos = tell($f);
|
|
Packit |
d03632 |
seek($f, 0,0);
|
|
Packit |
d03632 |
@strings = <$f> ;
|
|
Packit |
d03632 |
seek($f, 0, $pos);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
else
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
open (F, "<$f")
|
|
Packit |
d03632 |
or croak "Cannot open $f: $!\n" ;
|
|
Packit |
d03632 |
binmode F;
|
|
Packit |
d03632 |
@strings = <F> ;
|
|
Packit |
d03632 |
close F ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
return @strings if wantarray ;
|
|
Packit |
d03632 |
return join "", @strings ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub touch
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
foreach (@_) { writeFile($_, '') }
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub writeFile
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my($filename, @strings) = @_ ;
|
|
Packit |
d03632 |
1 while unlink $filename ;
|
|
Packit |
d03632 |
open (F, ">$filename")
|
|
Packit |
d03632 |
or croak "Cannot open $filename: $!\n" ;
|
|
Packit |
d03632 |
binmode F;
|
|
Packit |
d03632 |
foreach (@strings) {
|
|
Packit |
d03632 |
no warnings ;
|
|
Packit |
d03632 |
print F $_ ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
close F ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub GZreadFile
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my ($filename) = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my ($uncomp) = "" ;
|
|
Packit |
d03632 |
my $line = "" ;
|
|
Packit |
d03632 |
my $fil = gzopen($filename, "rb")
|
|
Packit |
d03632 |
or croak "Cannopt open '$filename': $Compress::Zlib::gzerrno" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$uncomp .= $line
|
|
Packit |
d03632 |
while $fil->gzread($line) > 0;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$fil->gzclose ;
|
|
Packit |
d03632 |
return $uncomp ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub hexDump
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $d = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if (IO::Compress::Base::Common::isaFilehandle($d))
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$d = readFile($d);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
elsif (IO::Compress::Base::Common::isaFilename($d))
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$d = readFile($d);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
else
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$d = $$d ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $offset = 0 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$d = '' unless defined $d ;
|
|
Packit |
d03632 |
#while (read(STDIN, $data, 16)) {
|
|
Packit |
d03632 |
while (my $data = substr($d, 0, 16)) {
|
|
Packit |
d03632 |
substr($d, 0, 16) = '' ;
|
|
Packit |
d03632 |
printf "# %8.8lx ", $offset;
|
|
Packit |
d03632 |
$offset += 16;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @array = unpack('C*', $data);
|
|
Packit |
d03632 |
foreach (@array) {
|
|
Packit |
d03632 |
printf('%2.2x ', $_);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
print " " x (16 - @array)
|
|
Packit |
d03632 |
if @array < 16 ;
|
|
Packit |
d03632 |
$data =~ tr/\0-\37\177-\377/./;
|
|
Packit |
d03632 |
print " $data\n";
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub readHeaderInfo
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $name = shift ;
|
|
Packit |
d03632 |
my %opts = @_ ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $string = <
|
|
Packit |
d03632 |
some text
|
|
Packit |
d03632 |
EOM
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my $x = new IO::Compress::Gzip $name, %opts
|
|
Packit |
d03632 |
or diag "GzipError is $IO::Compress::Gzip::GzipError" ;
|
|
Packit |
d03632 |
ok $x->write($string) ;
|
|
Packit |
d03632 |
ok $x->close ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#is GZreadFile($name), $string ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my $gunz = new IO::Uncompress::Gunzip $name, Strict => 0
|
|
Packit |
d03632 |
or diag "GunzipError is $IO::Uncompress::Gunzip::GunzipError" ;
|
|
Packit |
d03632 |
ok my $hdr = $gunz->getHeaderInfo();
|
|
Packit |
d03632 |
my $uncomp ;
|
|
Packit |
d03632 |
ok $gunz->read($uncomp) ;
|
|
Packit |
d03632 |
ok $uncomp eq $string;
|
|
Packit |
d03632 |
ok $gunz->close ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
return $hdr ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub cmpFile
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my ($filename, $uue) = @_ ;
|
|
Packit |
d03632 |
return readFile($filename) eq unpack("u", $uue) ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#sub isRawFormat
|
|
Packit |
d03632 |
#{
|
|
Packit |
d03632 |
# my $class = shift;
|
|
Packit |
d03632 |
# # TODO -- add Lzma here?
|
|
Packit |
d03632 |
# my %raw = map { $_ => 1 } qw( RawDeflate );
|
|
Packit |
d03632 |
#
|
|
Packit |
d03632 |
# return defined $raw{$class};
|
|
Packit |
d03632 |
#}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my %TOP = (
|
|
Packit |
d03632 |
'IO::Uncompress::AnyInflate' => { Inverse => 'IO::Compress::Gzip',
|
|
Packit |
d03632 |
Error => 'AnyInflateError',
|
|
Packit |
d03632 |
TopLevel => 'anyinflate',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Uncompress::AnyUncompress' => { Inverse => 'IO::Compress::Gzip',
|
|
Packit |
d03632 |
Error => 'AnyUncompressError',
|
|
Packit |
d03632 |
TopLevel => 'anyuncompress',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::Gzip' => { Inverse => 'IO::Uncompress::Gunzip',
|
|
Packit |
d03632 |
Error => 'GzipError',
|
|
Packit |
d03632 |
TopLevel => 'gzip',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::Gunzip' => { Inverse => 'IO::Compress::Gzip',
|
|
Packit |
d03632 |
Error => 'GunzipError',
|
|
Packit |
d03632 |
TopLevel => 'gunzip',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::Deflate' => { Inverse => 'IO::Uncompress::Inflate',
|
|
Packit |
d03632 |
Error => 'DeflateError',
|
|
Packit |
d03632 |
TopLevel => 'deflate',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::Inflate' => { Inverse => 'IO::Compress::Deflate',
|
|
Packit |
d03632 |
Error => 'InflateError',
|
|
Packit |
d03632 |
TopLevel => 'inflate',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::RawDeflate' => { Inverse => 'IO::Uncompress::RawInflate',
|
|
Packit |
d03632 |
Error => 'RawDeflateError',
|
|
Packit |
d03632 |
TopLevel => 'rawdeflate',
|
|
Packit |
d03632 |
Raw => 1,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::RawInflate' => { Inverse => 'IO::Compress::RawDeflate',
|
|
Packit |
d03632 |
Error => 'RawInflateError',
|
|
Packit |
d03632 |
TopLevel => 'rawinflate',
|
|
Packit |
d03632 |
Raw => 1,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::Zip' => { Inverse => 'IO::Uncompress::Unzip',
|
|
Packit |
d03632 |
Error => 'ZipError',
|
|
Packit |
d03632 |
TopLevel => 'zip',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::Unzip' => { Inverse => 'IO::Compress::Zip',
|
|
Packit |
d03632 |
Error => 'UnzipError',
|
|
Packit |
d03632 |
TopLevel => 'unzip',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::Bzip2' => { Inverse => 'IO::Uncompress::Bunzip2',
|
|
Packit |
d03632 |
Error => 'Bzip2Error',
|
|
Packit |
d03632 |
TopLevel => 'bzip2',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::Bunzip2' => { Inverse => 'IO::Compress::Bzip2',
|
|
Packit |
d03632 |
Error => 'Bunzip2Error',
|
|
Packit |
d03632 |
TopLevel => 'bunzip2',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::Lzop' => { Inverse => 'IO::Uncompress::UnLzop',
|
|
Packit |
d03632 |
Error => 'LzopError',
|
|
Packit |
d03632 |
TopLevel => 'lzop',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::UnLzop' => { Inverse => 'IO::Compress::Lzop',
|
|
Packit |
d03632 |
Error => 'UnLzopError',
|
|
Packit |
d03632 |
TopLevel => 'unlzop',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::Lzf' => { Inverse => 'IO::Uncompress::UnLzf',
|
|
Packit |
d03632 |
Error => 'LzfError',
|
|
Packit |
d03632 |
TopLevel => 'lzf',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::UnLzf' => { Inverse => 'IO::Compress::Lzf',
|
|
Packit |
d03632 |
Error => 'UnLzfError',
|
|
Packit |
d03632 |
TopLevel => 'unlzf',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::Lzma' => { Inverse => 'IO::Uncompress::UnLzma',
|
|
Packit |
d03632 |
Error => 'LzmaError',
|
|
Packit |
d03632 |
TopLevel => 'lzma',
|
|
Packit |
d03632 |
Raw => 1,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::UnLzma' => { Inverse => 'IO::Compress::Lzma',
|
|
Packit |
d03632 |
Error => 'UnLzmaError',
|
|
Packit |
d03632 |
TopLevel => 'unlzma',
|
|
Packit |
d03632 |
Raw => 1,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::Xz' => { Inverse => 'IO::Uncompress::UnXz',
|
|
Packit |
d03632 |
Error => 'XzError',
|
|
Packit |
d03632 |
TopLevel => 'xz',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::UnXz' => { Inverse => 'IO::Compress::Xz',
|
|
Packit |
d03632 |
Error => 'UnXzError',
|
|
Packit |
d03632 |
TopLevel => 'unxz',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::PPMd' => { Inverse => 'IO::Uncompress::UnPPMd',
|
|
Packit |
d03632 |
Error => 'PPMdError',
|
|
Packit |
d03632 |
TopLevel => 'ppmd',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::UnPPMd' => { Inverse => 'IO::Compress::PPMd',
|
|
Packit |
d03632 |
Error => 'UnPPMdError',
|
|
Packit |
d03632 |
TopLevel => 'unppmd',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
'IO::Compress::DummyComp' => { Inverse => 'IO::Uncompress::DummyUnComp',
|
|
Packit |
d03632 |
Error => 'DummyCompError',
|
|
Packit |
d03632 |
TopLevel => 'dummycomp',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
'IO::Uncompress::DummyUnComp' => { Inverse => 'IO::Compress::DummyComp',
|
|
Packit |
d03632 |
Error => 'DummyUnCompError',
|
|
Packit |
d03632 |
TopLevel => 'dummyunComp',
|
|
Packit |
d03632 |
Raw => 0,
|
|
Packit |
d03632 |
},
|
|
Packit |
d03632 |
);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
for my $key (keys %TOP)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
no strict;
|
|
Packit |
d03632 |
no warnings;
|
|
Packit |
d03632 |
$TOP{$key}{Error} = \${ $key . '::' . $TOP{$key}{Error} };
|
|
Packit |
d03632 |
$TOP{$key}{TopLevel} = $key . '::' . $TOP{$key}{TopLevel} ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# Silence used once warning in really old perl
|
|
Packit |
d03632 |
my $dummy = \${ $key . '::' . $TOP{$key}{Error} };
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#$TOP{$key . "::" . $TOP{$key}{TopLevel} } = $TOP{$key};
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub uncompressBuffer
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $compWith = shift ;
|
|
Packit |
d03632 |
my $buffer = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $out ;
|
|
Packit |
d03632 |
my $obj = $TOP{$compWith}{Inverse}->new( \$buffer, -Append => 1);
|
|
Packit |
d03632 |
1 while $obj->read($out) > 0 ;
|
|
Packit |
d03632 |
return $out ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub getInverse
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $class = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
return $TOP{$class}{Inverse};
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub getErrorRef
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $class = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
return $TOP{$class}{Error};
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub getTopFuncRef
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $class = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
die "Cannot find $class"
|
|
Packit |
d03632 |
if ! defined $TOP{$class}{TopLevel};
|
|
Packit |
d03632 |
return \&{ $TOP{$class}{TopLevel} } ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub getTopFuncName
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $class = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
return $TOP{$class}{TopLevel} ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub compressBuffer
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $compWith = shift ;
|
|
Packit |
d03632 |
my $buffer = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $out ;
|
|
Packit |
d03632 |
die "Cannot find $compWith"
|
|
Packit |
d03632 |
if ! defined $TOP{$compWith}{Inverse};
|
|
Packit |
d03632 |
my $obj = $TOP{$compWith}{Inverse}->new( \$out);
|
|
Packit |
d03632 |
$obj->write($buffer) ;
|
|
Packit |
d03632 |
$obj->close();
|
|
Packit |
d03632 |
return $out ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
our ($AnyUncompressError);
|
|
Packit |
d03632 |
BEGIN
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
eval ' use IO::Uncompress::AnyUncompress qw($AnyUncompressError); ';
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub anyUncompress
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $buffer = shift ;
|
|
Packit |
d03632 |
my $already = shift;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @opts = ();
|
|
Packit |
d03632 |
if (ref $buffer && ref $buffer eq 'ARRAY')
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
@opts = @$buffer;
|
|
Packit |
d03632 |
$buffer = shift @opts;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if (ref $buffer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
croak "buffer is undef" unless defined $$buffer;
|
|
Packit |
d03632 |
croak "buffer is empty" unless length $$buffer;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $data ;
|
|
Packit |
d03632 |
if (IO::Compress::Base::Common::isaFilehandle($buffer))
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$data = readFile($buffer);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
elsif (IO::Compress::Base::Common::isaFilename($buffer))
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$data = readFile($buffer);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
else
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$data = $$buffer ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if (defined $already && length $already)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $got = substr($data, 0, length($already));
|
|
Packit |
d03632 |
substr($data, 0, length($already)) = '';
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
is $got, $already, ' Already OK' ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $out = '';
|
|
Packit |
d03632 |
my $o = new IO::Uncompress::AnyUncompress \$data,
|
|
Packit |
d03632 |
Append => 1,
|
|
Packit |
d03632 |
Transparent => 0,
|
|
Packit |
d03632 |
RawInflate => 1,
|
|
Packit |
d03632 |
UnLzma => 1,
|
|
Packit |
d03632 |
@opts
|
|
Packit |
d03632 |
or croak "Cannot open buffer/file: $AnyUncompressError" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
1 while $o->read($out) > 0 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
croak "Error uncompressing -- " . $o->error()
|
|
Packit |
d03632 |
if $o->error() ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
return $out ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub getHeaders
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $buffer = shift ;
|
|
Packit |
d03632 |
my $already = shift;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @opts = ();
|
|
Packit |
d03632 |
if (ref $buffer && ref $buffer eq 'ARRAY')
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
@opts = @$buffer;
|
|
Packit |
d03632 |
$buffer = shift @opts;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if (ref $buffer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
croak "buffer is undef" unless defined $$buffer;
|
|
Packit |
d03632 |
croak "buffer is empty" unless length $$buffer;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $data ;
|
|
Packit |
d03632 |
if (IO::Compress::Base::Common::isaFilehandle($buffer))
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$data = readFile($buffer);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
elsif (IO::Compress::Base::Common::isaFilename($buffer))
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$data = readFile($buffer);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
else
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$data = $$buffer ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if (defined $already && length $already)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $got = substr($data, 0, length($already));
|
|
Packit |
d03632 |
substr($data, 0, length($already)) = '';
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
is $got, $already, ' Already OK' ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $out = '';
|
|
Packit |
d03632 |
my $o = new IO::Uncompress::AnyUncompress \$data,
|
|
Packit |
d03632 |
MultiStream => 1,
|
|
Packit |
d03632 |
Append => 1,
|
|
Packit |
d03632 |
Transparent => 0,
|
|
Packit |
d03632 |
RawInflate => 1,
|
|
Packit |
d03632 |
UnLzma => 1,
|
|
Packit |
d03632 |
@opts
|
|
Packit |
d03632 |
or croak "Cannot open buffer/file: $AnyUncompressError" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
1 while $o->read($out) > 0 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
croak "Error uncompressing -- " . $o->error()
|
|
Packit |
d03632 |
if $o->error() ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
return ($o->getHeaderInfo()) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub mkComplete
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $class = shift ;
|
|
Packit |
d03632 |
my $data = shift;
|
|
Packit |
d03632 |
my $Error = getErrorRef($class);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $buffer ;
|
|
Packit |
d03632 |
my %params = ();
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if ($class eq 'IO::Compress::Gzip') {
|
|
Packit |
d03632 |
%params = (
|
|
Packit |
d03632 |
Name => "My name",
|
|
Packit |
d03632 |
Comment => "a comment",
|
|
Packit |
d03632 |
ExtraField => ['ab' => "extra"],
|
|
Packit |
d03632 |
HeaderCRC => 1);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
elsif ($class eq 'IO::Compress::Zip'){
|
|
Packit |
d03632 |
%params = (
|
|
Packit |
d03632 |
Name => "My name",
|
|
Packit |
d03632 |
Comment => "a comment",
|
|
Packit |
d03632 |
ZipComment => "last comment",
|
|
Packit |
d03632 |
exTime => [100, 200, 300],
|
|
Packit |
d03632 |
ExtraFieldLocal => ["ab" => "extra1"],
|
|
Packit |
d03632 |
ExtraFieldCentral => ["cd" => "extra2"],
|
|
Packit |
d03632 |
);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $z = new $class( \$buffer, %params)
|
|
Packit |
d03632 |
or croak "Cannot create $class object: $$Error";
|
|
Packit |
d03632 |
$z->write($data);
|
|
Packit |
d03632 |
$z->close();
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $unc = getInverse($class);
|
|
Packit |
d03632 |
anyUncompress(\$buffer) eq $data
|
|
Packit |
d03632 |
or die "bad bad bad";
|
|
Packit |
d03632 |
my $u = new $unc( \$buffer);
|
|
Packit |
d03632 |
my $info = $u->getHeaderInfo() ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
return wantarray ? ($info, $buffer) : $buffer ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub mkErr
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $string = shift ;
|
|
Packit |
d03632 |
my ($dummy, $file, $line) = caller ;
|
|
Packit |
d03632 |
-- $line ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$file = quotemeta($file);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#return "/$string\\s+at $file line $line/" if $] >= 5.006 ;
|
|
Packit |
d03632 |
return "/$string\\s+at /" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub mkEvalErr
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $string = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#return "/$string\\s+at \\(eval /" if $] > 5.006 ;
|
|
Packit |
d03632 |
return "/$string\\s+at /" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub dumpObj
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $obj = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my ($dummy, $file, $line) = caller ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if (@_)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
print "#\n# dumpOBJ from $file line $line @_\n" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
else
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
print "#\n# dumpOBJ from $file line $line \n" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $max = 0 ;;
|
|
Packit |
d03632 |
foreach my $k (keys %{ *$obj })
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$max = length $k if length $k > $max ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
foreach my $k (sort keys %{ *$obj })
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $v = $obj->{$k} ;
|
|
Packit |
d03632 |
$v = '-undef-' unless defined $v;
|
|
Packit |
d03632 |
my $pad = ' ' x ($max - length($k) + 2) ;
|
|
Packit |
d03632 |
print "# $k$pad: [$v]\n";
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
print "#\n" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub getMultiValues
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $class = shift ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
return (0,0) if $class =~ /lzf|lzma/i;
|
|
Packit |
d03632 |
return (1,0);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
sub gotScalarUtilXS
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
eval ' use Scalar::Util "dualvar" ';
|
|
Packit |
d03632 |
return $@ ? 0 : 1 ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
package CompTestUtils;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
1;
|
|
Packit |
d03632 |
__END__
|
|
Packit |
d03632 |
t/Test/Builder.pm
|
|
Packit |
d03632 |
t/Test/More.pm
|
|
Packit |
d03632 |
t/Test/Simple.pm
|
|
Packit |
d03632 |
t/compress/CompTestUtils.pm
|
|
Packit |
d03632 |
t/compress/any.pl
|
|
Packit |
d03632 |
t/compress/anyunc.pl
|
|
Packit |
d03632 |
t/compress/destroy.pl
|
|
Packit |
d03632 |
t/compress/generic.pl
|
|
Packit |
d03632 |
t/compress/merge.pl
|
|
Packit |
d03632 |
t/compress/multi.pl
|
|
Packit |
d03632 |
t/compress/newtied.pl
|
|
Packit |
d03632 |
t/compress/oneshot.pl
|
|
Packit |
d03632 |
t/compress/prime.pl
|
|
Packit |
d03632 |
t/compress/tied.pl
|
|
Packit |
d03632 |
t/compress/truncate.pl
|
|
Packit |
d03632 |
t/compress/zlib-generic.plParsing config.in...
|
|
Packit |
d03632 |
Building Zlib enabled
|
|
Packit |
d03632 |
Auto Detect Gzip OS Code..
|
|
Packit |
d03632 |
Setting Gzip OS Code to 3 [Unix/Default]
|
|
Packit |
d03632 |
Looks Good.
|