summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2010-07-09 21:46:42 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2010-07-09 21:46:42 +0200
commit62d073d937742baf8621a11c3094e0320aa846cd (patch)
tree444ffbb1903d98a09556e22cf715c14266807526 /apt-pkg
parent7635093c1c015e385a9e72bdd8a089fd9d48ab57 (diff)
check the state of the FileFd before renaming as otherwise the rename
will be tried twice e.g. in an "apt-get update" run and every other piece of code closing the FileFd manual before the destructor will do it again.
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/contrib/fileutl.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index 62d42e4da..8f7791a8a 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -843,19 +843,21 @@ bool FileFd::Close()
bool Res = true;
if ((Flags & AutoClose) == AutoClose)
if (iFd >= 0 && close(iFd) != 0)
- Res &= _error->Errno("close",_("Problem closing the file"));
- iFd = -1;
+ Res &= _error->Errno("close",_("Problem closing the file %s"), FileName.c_str());
- if ((Flags & Replace) == Replace) {
+ if ((Flags & Replace) == Replace && iFd >= 0) {
if (rename(TemporaryFileName.c_str(), FileName.c_str()) != 0)
- Res &= _error->Errno("rename",_("Problem renaming the file"));
+ Res &= _error->Errno("rename",_("Problem renaming the file %s to %s"), TemporaryFileName.c_str(), FileName.c_str());
+
FileName = TemporaryFileName; // for the unlink() below.
}
-
+
+ iFd = -1;
+
if ((Flags & Fail) == Fail && (Flags & DelOnFail) == DelOnFail &&
FileName.empty() == false)
if (unlink(FileName.c_str()) != 0)
- Res &= _error->WarningE("unlnk",_("Problem unlinking the file"));
+ Res &= _error->WarningE("unlnk",_("Problem unlinking the file %s"), FileName.c_str());
return Res;