summaryrefslogtreecommitdiff
path: root/apt-private/private-install.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2014-10-15 04:18:07 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2014-10-15 04:18:07 +0200
commit9c81f8de38df940559d13a3ea9591d63cbe970bb (patch)
treebe24247ffdc8c1589484a3b60da477d9f3ea1b36 /apt-private/private-install.cc
parent990dd78ab46607ad06d81b36e303156040a236e2 (diff)
check for available space, excluding root reserved blocks
We are checking the space requirements for ages, but the check uses the free blocks count, which includes the blocks reserved for usage by root. Now that we use an unprivileged user it has no access to these blocks anymore – and more importantly these blocks are a reserve, they shouldn't be used by apt without special encouragement by the user as it would be bad to have dpkg run out of diskspace and maintainerscripts like man-db skip certain actions if not enough space is available freely.
Diffstat (limited to 'apt-private/private-install.cc')
-rw-r--r--apt-private/private-install.cc33
1 files changed, 3 insertions, 30 deletions
diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc
index c06caeedd..2a4c3eea5 100644
--- a/apt-private/private-install.cc
+++ b/apt-private/private-install.cc
@@ -22,11 +22,8 @@
#include <apt-pkg/upgrade.h>
#include <apt-pkg/install-progress.h>
-#include <errno.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/statfs.h>
-#include <sys/statvfs.h>
#include <algorithm>
#include <iostream>
#include <set>
@@ -177,33 +174,9 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety)
if (_error->PendingError() == true)
return false;
- /* Check for enough free space, but only if we are actually going to
- download */
- if (_config->FindB("APT::Get::Print-URIs") == false &&
- _config->FindB("APT::Get::Download",true) == true)
- {
- struct statvfs Buf;
- std::string OutputDir = _config->FindDir("Dir::Cache::Archives");
- if (statvfs(OutputDir.c_str(),&Buf) != 0) {
- if (errno == EOVERFLOW)
- return _error->WarningE("statvfs",_("Couldn't determine free space in %s"),
- OutputDir.c_str());
- else
- return _error->Errno("statvfs",_("Couldn't determine free space in %s"),
- OutputDir.c_str());
- } else if (unsigned(Buf.f_bfree) < (FetchBytes - FetchPBytes)/Buf.f_bsize)
- {
- struct statfs Stat;
- if (statfs(OutputDir.c_str(),&Stat) != 0
-#if HAVE_STRUCT_STATFS_F_TYPE
- || unsigned(Stat.f_type) != RAMFS_MAGIC
-#endif
- )
- return _error->Error(_("You don't have enough free space in %s."),
- OutputDir.c_str());
- }
- }
-
+ if (CheckFreeSpaceBeforeDownload(_config->FindDir("Dir::Cache::Archives"), (FetchBytes - FetchPBytes)) == false)
+ return false;
+
// Fail safe check
if (_config->FindI("quiet",0) >= 2 ||
_config->FindB("APT::Get::Assume-Yes",false) == true)