Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5767 alewis 1
package Archive::Zip::FileMember;
2
 
3
use strict;
4
use vars qw( $VERSION @ISA );
5
 
6
BEGIN {
7
    $VERSION = '1.57';
8
    @ISA     = qw ( Archive::Zip::Member );
9
}
10
 
11
use Archive::Zip qw(
12
  :UTILITY_METHODS
13
);
14
 
15
sub externalFileName {
16
    shift->{'externalFileName'};
17
}
18
 
19
# Return true if I depend on the named file
20
sub _usesFileNamed {
21
    my $self     = shift;
22
    my $fileName = shift;
23
    my $xfn      = $self->externalFileName();
24
    return undef if ref($xfn);
25
    return $xfn eq $fileName;
26
}
27
 
28
sub fh {
29
    my $self = shift;
30
    $self->_openFile()
31
      if !defined($self->{'fh'}) || !$self->{'fh'}->opened();
32
    return $self->{'fh'};
33
}
34
 
35
# opens my file handle from my file name
36
sub _openFile {
37
    my $self = shift;
38
    my ($status, $fh) = _newFileHandle($self->externalFileName(), 'r');
39
    if (!$status) {
40
        _ioError("Can't open", $self->externalFileName());
41
        return undef;
42
    }
43
    $self->{'fh'} = $fh;
44
    _binmode($fh);
45
    return $fh;
46
}
47
 
48
# Make sure I close my file handle
49
sub endRead {
50
    my $self = shift;
51
    undef $self->{'fh'};    # _closeFile();
52
    return $self->SUPER::endRead(@_);
53
}
54
 
55
sub _become {
56
    my $self     = shift;
57
    my $newClass = shift;
58
    return $self if ref($self) eq $newClass;
59
    delete($self->{'externalFileName'});
60
    delete($self->{'fh'});
61
    return $self->SUPER::_become($newClass);
62
}
63
 
64
1;