summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Archive/Zip/StringMember.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Archive/Zip/StringMember.pm')
-rwxr-xr-xMaster/tlpkg/tlperl/lib/Archive/Zip/StringMember.pm64
1 files changed, 64 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Archive/Zip/StringMember.pm b/Master/tlpkg/tlperl/lib/Archive/Zip/StringMember.pm
new file mode 100755
index 00000000000..fe6760849ac
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Archive/Zip/StringMember.pm
@@ -0,0 +1,64 @@
+package Archive::Zip::StringMember;
+
+use strict;
+use vars qw( $VERSION @ISA );
+
+BEGIN {
+ $VERSION = '1.30';
+ @ISA = qw( Archive::Zip::Member );
+}
+
+use Archive::Zip qw(
+ :CONSTANTS
+ :ERROR_CODES
+);
+
+# Create a new string member. Default is COMPRESSION_STORED.
+# Can take a ref to a string as well.
+sub _newFromString {
+ my $class = shift;
+ my $string = shift;
+ my $name = shift;
+ my $self = $class->new(@_);
+ $self->contents($string);
+ $self->fileName($name) if defined($name);
+
+ # Set the file date to now
+ $self->setLastModFileDateTimeFromUnix( time() );
+ $self->unixFileAttributes( $self->DEFAULT_FILE_PERMISSIONS );
+ return $self;
+}
+
+sub _become {
+ my $self = shift;
+ my $newClass = shift;
+ return $self if ref($self) eq $newClass;
+ delete( $self->{'contents'} );
+ return $self->SUPER::_become($newClass);
+}
+
+# Get or set my contents. Note that we do not call the superclass
+# version of this, because it calls us.
+sub contents {
+ my $self = shift;
+ my $string = shift;
+ if ( defined($string) ) {
+ $self->{'contents'} =
+ pack( 'C0a*', ( ref($string) eq 'SCALAR' ) ? $$string : $string );
+ $self->{'uncompressedSize'} = $self->{'compressedSize'} =
+ length( $self->{'contents'} );
+ $self->{'compressionMethod'} = COMPRESSION_STORED;
+ }
+ return $self->{'contents'};
+}
+
+# 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 ) = @_;
+ $$dataRef = substr( $self->contents(), $self->_readOffset(), $chunkSize );
+ return ( length($$dataRef), AZ_OK );
+}
+
+1;