summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorRaphaël Hertzog <hertzog@debian.org>2010-02-19 19:32:33 +0100
committerRaphaël Hertzog <hertzog@debian.org>2010-02-20 22:28:18 +0100
commit93f179a39dfd081e2a50dd258a322025004f6023 (patch)
treea51e88b3e2b42b4721d2a9e394f2eab2c74f6670 /scripts
parent6c8369aee32b5c99f45e60f62e6e07d26b2b42b8 (diff)
downloaddpkg-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.pm21
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;
}
##