X-Git-Url: http://git.maemo.org/git/?p=dh-make-perl;a=blobdiff_plain;f=dev%2Fi386%2Flibarchive-zip-perl%2Flibarchive-zip-perl-1.18%2Flib%2FArchive%2FZip%2FNewFileMember.pm;fp=dev%2Fi386%2Flibarchive-zip-perl%2Flibarchive-zip-perl-1.18%2Flib%2FArchive%2FZip%2FNewFileMember.pm;h=35fdbcdb59cc7c9572f6d3408fcf4235fceec256;hp=0000000000000000000000000000000000000000;hb=8977e561d8a9eae6959218b0306c9df2056a38a9;hpb=df794b845212301ea0d267c919232538bfef356a diff --git a/dev/i386/libarchive-zip-perl/libarchive-zip-perl-1.18/lib/Archive/Zip/NewFileMember.pm b/dev/i386/libarchive-zip-perl/libarchive-zip-perl-1.18/lib/Archive/Zip/NewFileMember.pm new file mode 100644 index 0000000..35fdbcd --- /dev/null +++ b/dev/i386/libarchive-zip-perl/libarchive-zip-perl-1.18/lib/Archive/Zip/NewFileMember.pm @@ -0,0 +1,79 @@ +package Archive::Zip::NewFileMember; + +use strict; +use vars qw( $VERSION @ISA ); + +BEGIN { + $VERSION = '1.18'; + @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;