-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
18704a2
commit c36ea53
Showing
16 changed files
with
7,767 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
package Archive::Zip::BufferedFileHandle; | ||
|
||
# File handle that uses a string internally and can seek | ||
# This is given as a demo for getting a zip file written | ||
# to a string. | ||
# I probably should just use IO::Scalar instead. | ||
# Ned Konz, March 2000 | ||
|
||
use strict; | ||
use IO::File; | ||
use Carp; | ||
|
||
use vars qw{$VERSION}; | ||
|
||
BEGIN { | ||
$VERSION = '1.31_04'; | ||
$VERSION = eval $VERSION; | ||
} | ||
|
||
sub new { | ||
my $class = shift || __PACKAGE__; | ||
$class = ref($class) || $class; | ||
my $self = bless( | ||
{ | ||
content => '', | ||
position => 0, | ||
size => 0 | ||
}, | ||
$class | ||
); | ||
return $self; | ||
} | ||
|
||
# Utility method to read entire file | ||
sub readFromFile { | ||
my $self = shift; | ||
my $fileName = shift; | ||
my $fh = IO::File->new( $fileName, "r" ); | ||
CORE::binmode($fh); | ||
if ( !$fh ) { | ||
Carp::carp("Can't open $fileName: $!\n"); | ||
return undef; | ||
} | ||
local $/ = undef; | ||
$self->{content} = <$fh>; | ||
$self->{size} = length( $self->{content} ); | ||
return $self; | ||
} | ||
|
||
sub contents { | ||
my $self = shift; | ||
if (@_) { | ||
$self->{content} = shift; | ||
$self->{size} = length( $self->{content} ); | ||
} | ||
return $self->{content}; | ||
} | ||
|
||
sub binmode { 1 } | ||
|
||
sub close { 1 } | ||
|
||
sub opened { 1 } | ||
|
||
sub eof { | ||
my $self = shift; | ||
return $self->{position} >= $self->{size}; | ||
} | ||
|
||
sub seek { | ||
my $self = shift; | ||
my $pos = shift; | ||
my $whence = shift; | ||
|
||
# SEEK_SET | ||
if ( $whence == 0 ) { $self->{position} = $pos; } | ||
|
||
# SEEK_CUR | ||
elsif ( $whence == 1 ) { $self->{position} += $pos; } | ||
|
||
# SEEK_END | ||
elsif ( $whence == 2 ) { $self->{position} = $self->{size} + $pos; } | ||
else { return 0; } | ||
|
||
return 1; | ||
} | ||
|
||
sub tell { return shift->{position}; } | ||
|
||
# Copy my data to given buffer | ||
sub read { | ||
my $self = shift; | ||
my $buf = \( $_[0] ); | ||
shift; | ||
my $len = shift; | ||
my $offset = shift || 0; | ||
|
||
$$buf = '' if not defined($$buf); | ||
my $bytesRead = | ||
( $self->{position} + $len > $self->{size} ) | ||
? ( $self->{size} - $self->{position} ) | ||
: $len; | ||
substr( $$buf, $offset, $bytesRead ) = | ||
substr( $self->{content}, $self->{position}, $bytesRead ); | ||
$self->{position} += $bytesRead; | ||
return $bytesRead; | ||
} | ||
|
||
# Copy given buffer to me | ||
sub write { | ||
my $self = shift; | ||
my $buf = \( $_[0] ); | ||
shift; | ||
my $len = shift; | ||
my $offset = shift || 0; | ||
|
||
$$buf = '' if not defined($$buf); | ||
my $bufLen = length($$buf); | ||
my $bytesWritten = | ||
( $offset + $len > $bufLen ) | ||
? $bufLen - $offset | ||
: $len; | ||
substr( $self->{content}, $self->{position}, $bytesWritten ) = | ||
substr( $$buf, $offset, $bytesWritten ); | ||
$self->{size} = length( $self->{content} ); | ||
return $bytesWritten; | ||
} | ||
|
||
sub clearerr() { 1 } | ||
|
||
1; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
package Archive::Zip::DirectoryMember; | ||
|
||
use strict; | ||
use File::Path; | ||
|
||
use vars qw( $VERSION @ISA ); | ||
|
||
BEGIN { | ||
$VERSION = '1.31_04'; | ||
@ISA = qw( Archive::Zip::Member ); | ||
} | ||
|
||
use Archive::Zip qw( | ||
:ERROR_CODES | ||
:UTILITY_METHODS | ||
); | ||
|
||
sub _newNamed { | ||
my $class = shift; | ||
my $fileName = shift; # FS name | ||
my $newName = shift; # Zip name | ||
$newName = _asZipDirName($fileName) unless $newName; | ||
my $self = $class->new(@_); | ||
$self->{'externalFileName'} = $fileName; | ||
$self->fileName($newName); | ||
|
||
if ( -e $fileName ) { | ||
|
||
# -e does NOT do a full stat, so we need to do one now | ||
if ( -d _ ) { | ||
my @stat = stat(_); | ||
$self->unixFileAttributes( $stat[2] ); | ||
my $mod_t = $stat[9]; | ||
if ( $^O eq 'MSWin32' and !$mod_t ) { | ||
$mod_t = time(); | ||
} | ||
$self->setLastModFileDateTimeFromUnix($mod_t); | ||
|
||
} else { # hmm.. trying to add a non-directory? | ||
_error( $fileName, ' exists but is not a directory' ); | ||
return undef; | ||
} | ||
} else { | ||
$self->unixFileAttributes( $self->DEFAULT_DIRECTORY_PERMISSIONS ); | ||
$self->setLastModFileDateTimeFromUnix( time() ); | ||
} | ||
return $self; | ||
} | ||
|
||
sub externalFileName { | ||
shift->{'externalFileName'}; | ||
} | ||
|
||
sub isDirectory { | ||
return 1; | ||
} | ||
|
||
sub extractToFileNamed { | ||
my $self = shift; | ||
my $name = shift; # local FS name | ||
my $attribs = $self->unixFileAttributes() & 07777; | ||
mkpath( $name, 0, $attribs ); # croaks on error | ||
utime( $self->lastModTime(), $self->lastModTime(), $name ); | ||
return AZ_OK; | ||
} | ||
|
||
sub fileName { | ||
my $self = shift; | ||
my $newName = shift; | ||
$newName =~ s{/?$}{/} if defined($newName); | ||
return $self->SUPER::fileName($newName); | ||
} | ||
|
||
# So people don't get too confused. This way it looks like the problem | ||
# is in their code... | ||
sub contents { | ||
return wantarray ? ( undef, AZ_OK ) : undef; | ||
} | ||
|
||
1; |
Oops, something went wrong.