diff options
Diffstat (limited to 'lib/Archive/Zip/FileMember.pm')
-rw-r--r-- | lib/Archive/Zip/FileMember.pm | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/Archive/Zip/FileMember.pm b/lib/Archive/Zip/FileMember.pm new file mode 100644 index 0000000..5f1066e --- /dev/null +++ b/lib/Archive/Zip/FileMember.pm @@ -0,0 +1,64 @@ +package Archive::Zip::FileMember; + +use strict; +use vars qw( $VERSION @ISA ); + +BEGIN { + $VERSION = '1.49'; + @ISA = qw ( Archive::Zip::Member ); +} + +use Archive::Zip qw( + :UTILITY_METHODS +); + +sub externalFileName { + shift->{'externalFileName'}; +} + +# Return true if I depend on the named file +sub _usesFileNamed { + my $self = shift; + my $fileName = shift; + my $xfn = $self->externalFileName(); + return undef if ref($xfn); + return $xfn eq $fileName; +} + +sub fh { + my $self = shift; + $self->_openFile() + if !defined($self->{'fh'}) || !$self->{'fh'}->opened(); + return $self->{'fh'}; +} + +# opens my file handle from my file name +sub _openFile { + my $self = shift; + my ($status, $fh) = _newFileHandle($self->externalFileName(), 'r'); + if (!$status) { + _ioError("Can't open", $self->externalFileName()); + return undef; + } + $self->{'fh'} = $fh; + _binmode($fh); + return $fh; +} + +# Make sure I close my file handle +sub endRead { + my $self = shift; + undef $self->{'fh'}; # _closeFile(); + return $self->SUPER::endRead(@_); +} + +sub _become { + my $self = shift; + my $newClass = shift; + return $self if ref($self) eq $newClass; + delete($self->{'externalFileName'}); + delete($self->{'fh'}); + return $self->SUPER::_become($newClass); +} + +1; |