Archive-Zip
view release on metacpan or search on metacpan
lib/Archive/Zip/Member.pm view on Meta::CPAN
# Returns self if successful, else undef
# Assumes that fh is positioned at beginning of central directory file header.
# Leaves fh positioned immediately after file header or EOCD signature.
sub _newFromZipFile {
my $class = shift;
my $self = Archive::Zip::ZipFileMember->_newFromZipFile(@_);
return $self;
}
sub newFromString {
my $class = shift;
my ($stringOrStringRef, $fileName);
if (ref($_[0]) eq 'HASH') {
$stringOrStringRef = $_[0]->{string};
$fileName = $_[0]->{zipName};
} else {
($stringOrStringRef, $fileName) = @_;
}
my $self =
Archive::Zip::StringMember->_newFromString($stringOrStringRef, $fileName);
return $self;
}
sub newFromFile {
my $class = shift;
my ($fileName, $zipName);
if (ref($_[0]) eq 'HASH') {
$fileName = $_[0]->{fileName};
$zipName = $_[0]->{zipName};
} else {
($fileName, $zipName) = @_;
}
my $self =
Archive::Zip::NewFileMember->_newFromFileNamed($fileName, $zipName);
return $self;
}
sub newDirectoryNamed {
my $class = shift;
my ($directoryName, $newName);
if (ref($_[0]) eq 'HASH') {
$directoryName = $_[0]->{directoryName};
$newName = $_[0]->{zipName};
} else {
($directoryName, $newName) = @_;
}
my $self =
Archive::Zip::DirectoryMember->_newNamed($directoryName, $newName);
return $self;
}
sub new {
my $class = shift;
# Info-Zip 3.0 (I guess) seems to use the following values
# for the version fields in local and central directory
# headers, regardless of whether the member has an zip64
# extended information extra field or not:
#
# version made by:
# 30
#
# version needed to extract:
# 10 for directory and stored entries
# 20 for anything else
my $self = {
'lastModFileDateTime' => 0,
'fileAttributeFormat' => FA_UNIX,
'zip64' => 0,
'desiredZip64Mode' => ZIP64_AS_NEEDED,
'versionMadeBy' => 20,
'versionNeededToExtract' => 20,
'bitFlag' => ($Archive::Zip::UNICODE ? 0x0800 : 0),
'compressionMethod' => COMPRESSION_STORED,
'desiredCompressionMethod' => COMPRESSION_STORED,
'desiredCompressionLevel' => COMPRESSION_LEVEL_NONE,
'internalFileAttributes' => 0,
'externalFileAttributes' => 0, # set later
'fileName' => '',
'cdExtraField' => '',
'localExtraField' => '',
'fileComment' => '',
'crc32' => 0,
'compressedSize' => 0,
'uncompressedSize' => 0,
'password' => undef, # password for encrypted data
'crc32c' => -1, # crc for decrypted data
@_
};
bless($self, $class);
$self->unixFileAttributes($self->DEFAULT_FILE_PERMISSIONS);
return $self;
}
# Morph into given class (do whatever cleanup I need to do)
sub _become {
return bless($_[0], $_[1]);
}
sub fileAttributeFormat {
my $self = shift;
if (@_) {
$self->{fileAttributeFormat} =
(ref($_[0]) eq 'HASH') ? $_[0]->{format} : $_[0];
} else {
return $self->{fileAttributeFormat};
}
}
sub zip64 {
shift->{'zip64'};
}
sub desiredZip64Mode {
( run in 4.350 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )