Blame | Last modification | View Log | RSS feed
package Archive::Zip::NewFileMember;use strict;use vars qw( $VERSION @ISA );BEGIN {$VERSION = '1.57';@ISA = qw ( Archive::Zip::FileMember );}use Archive::Zip qw(:CONSTANTS:ERROR_CODES:UTILITY_METHODS);# Given a file name, set up for eventual writing.sub _newFromFileNamed {my $class = shift;my $fileName = shift; # local FS formatmy $newName = shift;$newName = _asZipDirName($fileName) unless defined($newName);return undef unless (stat($fileName) && -r _ && !-d _ );my $self = $class->new(@_);$self->{'fileName'} = $newName;$self->{'externalFileName'} = $fileName;$self->{'compressionMethod'} = COMPRESSION_STORED;my @stat = stat(_);$self->{'compressedSize'} = $self->{'uncompressedSize'} = $stat[7];$self->desiredCompressionMethod(($self->compressedSize() > 0)? COMPRESSION_DEFLATED: COMPRESSION_STORED);$self->unixFileAttributes($stat[2]);$self->setLastModFileDateTimeFromUnix($stat[9]);$self->isTextFile(-T _ );return $self;}sub rewindData {my $self = shift;my $status = $self->SUPER::rewindData(@_);return $status unless $status == AZ_OK;return AZ_IO_ERROR unless $self->fh();$self->fh()->clearerr();$self->fh()->seek(0, IO::Seekable::SEEK_SET)or return _ioError("rewinding", $self->externalFileName());return AZ_OK;}# Return bytes read. Note that first parameter is a ref to a buffer.# my $data;# my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize );sub _readRawChunk {my ($self, $dataRef, $chunkSize) = @_;return (0, AZ_OK) unless $chunkSize;my $bytesRead = $self->fh()->read($$dataRef, $chunkSize)or return (0, _ioError("reading data"));return ($bytesRead, AZ_OK);}# If I already exist, extraction is a no-op.sub extractToFileNamed {my $self = shift;my $name = shift; # local FS nameif (File::Spec->rel2abs($name) eqFile::Spec->rel2abs($self->externalFileName()) and -r $name) {return AZ_OK;} else {return $self->SUPER::extractToFileNamed($name, @_);}}1;