summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Archive/Zip/NewFileMember.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Archive/Zip/NewFileMember.pm')
-rwxr-xr-xMaster/tlpkg/tlperl/lib/Archive/Zip/NewFileMember.pm79
1 files changed, 79 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Archive/Zip/NewFileMember.pm b/Master/tlpkg/tlperl/lib/Archive/Zip/NewFileMember.pm
new file mode 100755
index 00000000000..79178082151
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Archive/Zip/NewFileMember.pm
@@ -0,0 +1,79 @@
+package Archive::Zip::NewFileMember;
+
+use strict;
+use vars qw( $VERSION @ISA );
+
+BEGIN {
+ $VERSION = '1.30';
+ @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 format
+ my $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 name
+ if ( File::Spec->rel2abs($name) eq
+ File::Spec->rel2abs( $self->externalFileName() ) and -r $name )
+ {
+ return AZ_OK;
+ }
+ else {
+ return $self->SUPER::extractToFileNamed( $name, @_ );
+ }
+}
+
+1;