diff options
author | Raphaël Hertzog <hertzog@debian.org> | 2010-02-19 19:32:33 +0100 |
---|---|---|
committer | Raphaël Hertzog <hertzog@debian.org> | 2010-02-20 22:28:18 +0100 |
commit | 93f179a39dfd081e2a50dd258a322025004f6023 (patch) | |
tree | a51e88b3e2b42b4721d2a9e394f2eab2c74f6670 /scripts | |
parent | 6c8369aee32b5c99f45e60f62e6e07d26b2b42b8 (diff) | |
download | dpkg-93f179a39dfd081e2a50dd258a322025004f6023.tar.gz |
Dpkg::Compression::FileHandle: fix behaviour when the file is not open
The syscall-like interface should not error out when the file has not been
opened, it must simply return failure codes.
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Dpkg/Compression/FileHandle.pm | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/scripts/Dpkg/Compression/FileHandle.pm b/scripts/Dpkg/Compression/FileHandle.pm index fcf500552..658a9f743 100644 --- a/scripts/Dpkg/Compression/FileHandle.pm +++ b/scripts/Dpkg/Compression/FileHandle.pm @@ -212,34 +212,43 @@ sub OPEN { sub CLOSE { my ($self) = shift; my $ret = 1; - $ret = *$self->{'file'}->close(@_) if *$self->{'file'}->opened(); + if (defined *$self->{'file'}) { + $ret = *$self->{'file'}->close(@_) if *$self->{'file'}->opened(); + } else { + $ret = 0; + } $self->cleanup(); return $ret; } sub FILENO { my ($self) = shift; - return *$self->{"file"}->fileno(@_); + return *$self->{"file"}->fileno(@_) if defined *$self->{"file"}; + return undef; } sub EOF { my ($self) = shift; - return *$self->{"file"}->eof(@_); + return *$self->{"file"}->eof(@_) if defined *$self->{"file"}; + return 1; } sub SEEK { my ($self) = shift; - return *$self->{"file"}->seek(@_); + return *$self->{"file"}->seek(@_) if defined *$self->{"file"}; + return 0; } sub TELL { my ($self) = shift; - return *$self->{"file"}->tell(@_); + return *$self->{"file"}->tell(@_) if defined *$self->{"file"}; + return -1; } sub BINMODE { my ($self) = shift; - return *$self->{"file"}->binmode(@_); + return *$self->{"file"}->binmode(@_) if defined *$self->{"file"}; + return undef; } ## |