| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | package Archive::Zip::NewFileMember; | 
| 2 |  |  |  |  |  |  |  | 
| 3 | 28 |  |  | 28 |  | 709 | use strict; | 
|  | 28 |  |  |  |  | 60 |  | 
|  | 28 |  |  |  |  | 795 |  | 
| 4 | 28 |  |  | 28 |  | 137 | use vars qw( $VERSION @ISA ); | 
|  | 28 |  |  |  |  | 49 |  | 
|  | 28 |  |  |  |  | 1508 |  | 
| 5 |  |  |  |  |  |  |  | 
| 6 |  |  |  |  |  |  | BEGIN { | 
| 7 | 28 |  |  | 28 |  | 84 | $VERSION = '1.67'; | 
| 8 | 28 |  |  |  |  | 1075 | @ISA     = qw ( Archive::Zip::FileMember ); | 
| 9 |  |  |  |  |  |  | } | 
| 10 |  |  |  |  |  |  |  | 
| 11 | 28 |  |  |  |  | 14881 | use Archive::Zip qw( | 
| 12 |  |  |  |  |  |  | :CONSTANTS | 
| 13 |  |  |  |  |  |  | :ERROR_CODES | 
| 14 |  |  |  |  |  |  | :UTILITY_METHODS | 
| 15 | 28 |  |  | 28 |  | 150 | ); | 
|  | 28 |  |  |  |  | 52 |  | 
| 16 |  |  |  |  |  |  |  | 
| 17 |  |  |  |  |  |  | # Given a file name, set up for eventual writing. | 
| 18 |  |  |  |  |  |  | sub _newFromFileNamed { | 
| 19 | 334 |  |  | 334 |  | 443 | my $class    = shift; | 
| 20 | 334 |  |  |  |  | 413 | my $fileName = shift;    # local FS format | 
| 21 | 334 |  |  |  |  | 380 | my $newName  = shift; | 
| 22 | 334 | 100 |  |  |  | 596 | $newName = _asZipDirName($fileName) unless defined($newName); | 
| 23 | 334 | 50 | 33 |  |  | 5562 | return undef unless (stat($fileName) && -r _ && !-d _ ); | 
|  |  |  | 33 |  |  |  |  | 
| 24 | 334 |  |  |  |  | 6703 | my $self = $class->new(@_); | 
| 25 | 334 |  |  |  |  | 582 | $self->{'fileName'}          = $newName; | 
| 26 | 334 |  |  |  |  | 564 | $self->{'externalFileName'}  = $fileName; | 
| 27 | 334 |  |  |  |  | 416 | $self->{'compressionMethod'} = COMPRESSION_STORED; | 
| 28 | 334 |  |  |  |  | 826 | my @stat = stat(_); | 
| 29 | 334 |  |  |  |  | 469 | $self->{'compressedSize'} = $self->{'uncompressedSize'} = $stat[7]; | 
| 30 | 334 | 100 |  |  |  | 646 | $self->desiredCompressionMethod( | 
| 31 |  |  |  |  |  |  | ($self->compressedSize() > 0) | 
| 32 |  |  |  |  |  |  | ? COMPRESSION_DEFLATED | 
| 33 |  |  |  |  |  |  | : COMPRESSION_STORED | 
| 34 |  |  |  |  |  |  | ); | 
| 35 | 334 |  |  |  |  | 973 | $self->unixFileAttributes($stat[2]); | 
| 36 | 334 |  |  |  |  | 840 | $self->setLastModFileDateTimeFromUnix($stat[9]); | 
| 37 | 334 |  |  |  |  | 12055 | $self->isTextFile(-T _ ); | 
| 38 | 334 |  |  |  |  | 879 | return $self; | 
| 39 |  |  |  |  |  |  | } | 
| 40 |  |  |  |  |  |  |  | 
| 41 |  |  |  |  |  |  | sub rewindData { | 
| 42 | 69 |  |  | 69 | 1 | 111 | my $self = shift; | 
| 43 |  |  |  |  |  |  |  | 
| 44 | 69 |  |  |  |  | 208 | my $status = $self->SUPER::rewindData(@_); | 
| 45 | 69 | 50 |  |  |  | 199 | return $status unless $status == AZ_OK; | 
| 46 |  |  |  |  |  |  |  | 
| 47 | 69 | 50 |  |  |  | 238 | return AZ_IO_ERROR unless $self->fh(); | 
| 48 | 69 |  |  |  |  | 162 | $self->fh()->clearerr(); | 
| 49 | 69 | 50 |  |  |  | 163 | $self->fh()->seek(0, IO::Seekable::SEEK_SET) | 
| 50 |  |  |  |  |  |  | or return _ioError("rewinding", $self->externalFileName()); | 
| 51 | 69 |  |  |  |  | 889 | return AZ_OK; | 
| 52 |  |  |  |  |  |  | } | 
| 53 |  |  |  |  |  |  |  | 
| 54 |  |  |  |  |  |  | # Return bytes read. Note that first parameter is a ref to a buffer. | 
| 55 |  |  |  |  |  |  | # my $data; | 
| 56 |  |  |  |  |  |  | # my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize ); | 
| 57 |  |  |  |  |  |  | sub _readRawChunk { | 
| 58 | 73 |  |  | 73 |  | 146 | my ($self, $dataRef, $chunkSize) = @_; | 
| 59 | 73 | 50 |  |  |  | 153 | return (0, AZ_OK) unless $chunkSize; | 
| 60 | 73 | 50 |  |  |  | 195 | my $bytesRead = $self->fh()->read($$dataRef, $chunkSize) | 
| 61 |  |  |  |  |  |  | or return (0, _ioError("reading data")); | 
| 62 | 73 |  |  |  |  | 1996 | return ($bytesRead, AZ_OK); | 
| 63 |  |  |  |  |  |  | } | 
| 64 |  |  |  |  |  |  |  | 
| 65 |  |  |  |  |  |  | # If I already exist, extraction is a no-op. | 
| 66 |  |  |  |  |  |  | sub extractToFileNamed { | 
| 67 | 14 |  |  | 14 | 1 | 28 | my $self = shift; | 
| 68 | 14 |  |  |  |  | 33 | my $name = shift;    # local FS name | 
| 69 | 14 | 100 | 66 |  |  | 312 | if (File::Spec->rel2abs($name) eq | 
| 70 |  |  |  |  |  |  | File::Spec->rel2abs($self->externalFileName()) and -r $name) { | 
| 71 | 3 |  |  |  |  | 16 | return AZ_OK; | 
| 72 |  |  |  |  |  |  | } else { | 
| 73 | 11 |  |  |  |  | 59 | return $self->SUPER::extractToFileNamed($name, @_); | 
| 74 |  |  |  |  |  |  | } | 
| 75 |  |  |  |  |  |  | } | 
| 76 |  |  |  |  |  |  |  | 
| 77 |  |  |  |  |  |  | 1; |