diff options
author | David Kalnischkies <david@kalnischkies.de> | 2016-07-29 21:39:20 +0200 |
---|---|---|
committer | Julian Andres Klode <jak@debian.org> | 2016-10-05 12:02:19 +0200 |
commit | 1b63558a39ee1eed7eb024cd0e164d73beb165b1 (patch) | |
tree | b902625038ce6ff4d1ae999a8f9017cd4daf105f | |
parent | df47efeb5764bba8ac4789727f9ffe970e5cd756 (diff) |
if the FileFd failed already following calls should fail, too
There is no point in trying to perform Write/Read on a FileFd which
already failed as they aren't going to work as expected, so we should
make sure that they fail early on and hard.
(cherry picked from commit 02c38073af51802c02bb104d4450e0e112d641ad)
-rw-r--r-- | apt-pkg/contrib/fileutl.cc | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 76eb6c7f0..b8409c35d 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -2375,7 +2375,7 @@ FileFd::~FileFd() gracefully. */ bool FileFd::Read(void *To,unsigned long long Size,unsigned long long *Actual) { - if (d == nullptr) + if (d == nullptr || Failed()) return false; ssize_t Res = 1; errno = 0; @@ -2426,7 +2426,7 @@ bool FileFd::Read(void *To,unsigned long long Size,unsigned long long *Actual) char* FileFd::ReadLine(char *To, unsigned long long const Size) { *To = '\0'; - if (d == nullptr) + if (d == nullptr || Failed()) return nullptr; return d->InternalReadLine(To, Size); } @@ -2434,6 +2434,8 @@ char* FileFd::ReadLine(char *To, unsigned long long const Size) // FileFd::Flush - Flush the file /*{{{*/ bool FileFd::Flush() { + if (Failed()) + return false; if (d == nullptr) return true; @@ -2443,7 +2445,7 @@ bool FileFd::Flush() // FileFd::Write - Write to the file /*{{{*/ bool FileFd::Write(const void *From,unsigned long long Size) { - if (d == nullptr) + if (d == nullptr || Failed()) return false; ssize_t Res = 1; errno = 0; @@ -2499,7 +2501,7 @@ bool FileFd::Write(int Fd, const void *From, unsigned long long Size) // FileFd::Seek - Seek in the file /*{{{*/ bool FileFd::Seek(unsigned long long To) { - if (d == nullptr) + if (d == nullptr || Failed()) return false; Flags &= ~HitEof; return d->InternalSeek(To); @@ -2508,7 +2510,7 @@ bool FileFd::Seek(unsigned long long To) // FileFd::Skip - Skip over data in the file /*{{{*/ bool FileFd::Skip(unsigned long long Over) { - if (d == nullptr) + if (d == nullptr || Failed()) return false; return d->InternalSkip(Over); } @@ -2516,7 +2518,7 @@ bool FileFd::Skip(unsigned long long Over) // FileFd::Truncate - Truncate the file /*{{{*/ bool FileFd::Truncate(unsigned long long To) { - if (d == nullptr) + if (d == nullptr || Failed()) return false; // truncating /dev/null is always successful - as we get an error otherwise if (To == 0 && FileName == "/dev/null") @@ -2529,7 +2531,7 @@ bool FileFd::Truncate(unsigned long long To) /* */ unsigned long long FileFd::Tell() { - if (d == nullptr) + if (d == nullptr || Failed()) return false; off_t const Res = d->InternalTell(); if (Res == (off_t)-1) @@ -2592,7 +2594,7 @@ time_t FileFd::ModificationTime() unsigned long long FileFd::Size() { if (d == nullptr) - return false; + return 0; return d->InternalSize(); } /*}}}*/ |