Blame lib/Archive/Zip/FileMember.pm

Packit 0bf95d
package Archive::Zip::FileMember;
Packit 0bf95d
Packit 0bf95d
use strict;
Packit 0bf95d
use vars qw( $VERSION @ISA );
Packit 0bf95d
Packit 0bf95d
BEGIN {
Packit 0bf95d
    $VERSION = '1.60';
Packit 0bf95d
    @ISA     = qw ( Archive::Zip::Member );
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
use Archive::Zip qw(
Packit 0bf95d
  :UTILITY_METHODS
Packit 0bf95d
);
Packit 0bf95d
Packit 0bf95d
sub externalFileName {
Packit 0bf95d
    shift->{'externalFileName'};
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
# Return true if I depend on the named file
Packit 0bf95d
sub _usesFileNamed {
Packit 0bf95d
    my $self     = shift;
Packit 0bf95d
    my $fileName = shift;
Packit 0bf95d
    my $xfn      = $self->externalFileName();
Packit 0bf95d
    return undef if ref($xfn);
Packit 0bf95d
    return $xfn eq $fileName;
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
sub fh {
Packit 0bf95d
    my $self = shift;
Packit 0bf95d
    $self->_openFile()
Packit 0bf95d
      if !defined($self->{'fh'}) || !$self->{'fh'}->opened();
Packit 0bf95d
    return $self->{'fh'};
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
# opens my file handle from my file name
Packit 0bf95d
sub _openFile {
Packit 0bf95d
    my $self = shift;
Packit 0bf95d
    my ($status, $fh) = _newFileHandle($self->externalFileName(), 'r');
Packit 0bf95d
    if (!$status) {
Packit 0bf95d
        _ioError("Can't open", $self->externalFileName());
Packit 0bf95d
        return undef;
Packit 0bf95d
    }
Packit 0bf95d
    $self->{'fh'} = $fh;
Packit 0bf95d
    _binmode($fh);
Packit 0bf95d
    return $fh;
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
# Make sure I close my file handle
Packit 0bf95d
sub endRead {
Packit 0bf95d
    my $self = shift;
Packit 0bf95d
    undef $self->{'fh'};    # _closeFile();
Packit 0bf95d
    return $self->SUPER::endRead(@_);
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
sub _become {
Packit 0bf95d
    my $self     = shift;
Packit 0bf95d
    my $newClass = shift;
Packit 0bf95d
    return $self if ref($self) eq $newClass;
Packit 0bf95d
    delete($self->{'externalFileName'});
Packit 0bf95d
    delete($self->{'fh'});
Packit 0bf95d
    return $self->SUPER::_become($newClass);
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
1;