X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/5a8cd0703bcc751ff5eb0ae5bf196e61bd428c91..610e13842a3718128c03454c5dfcbde49d323281:/apt-pkg/clean.cc?ds=inline diff --git a/apt-pkg/clean.cc b/apt-pkg/clean.cc index 9c167eaa5..fe57c26a2 100644 --- a/apt-pkg/clean.cc +++ b/apt-pkg/clean.cc @@ -16,7 +16,11 @@ #include #include #include +#include +#include +#include +#include #include #include #include @@ -30,7 +34,15 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) { bool CleanInstalled = _config->FindB("APT::Clean-Installed",true); - + + if(Dir == "/") + return _error->Error(_("Clean of %s is not supported"), Dir.c_str()); + + // non-existing directories are always clean + // we do not check for a directory explicitly to support symlinks + if (FileExists(Dir) == false) + return true; + DIR *D = opendir(Dir.c_str()); if (D == 0) return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str()); @@ -47,6 +59,7 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) // Skip some files.. if (strcmp(Dir->d_name,"lock") == 0 || strcmp(Dir->d_name,"partial") == 0 || + strcmp(Dir->d_name,"lost+found") == 0 || strcmp(Dir->d_name,".") == 0 || strcmp(Dir->d_name,"..") == 0) continue; @@ -81,12 +94,13 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) if (*I != '.') continue; std::string const Arch = DeQuoteString(std::string(Start,I-Start)); - + + // ignore packages of unconfigured architectures if (APT::Configuration::checkArchitecture(Arch) == false) continue; // Lookup the package - pkgCache::PkgIterator P = Cache.FindPkg(Pkg); + pkgCache::PkgIterator P = Cache.FindPkg(Pkg, Arch); if (P.end() != true) { pkgCache::VerIterator V = P.VersionList(); @@ -98,13 +112,13 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) J.end() == false; ++J) { if (CleanInstalled == true && - (J.File()->Flags & pkgCache::Flag::NotSource) != 0) + J.File().Flagged(pkgCache::Flag::NotSource)) continue; IsFetchable = true; break; } - // See if this verison matches the file + // See if this version matches the file if (IsFetchable == true && Ver == V.VerStr()) break; } @@ -123,3 +137,6 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) return true; } /*}}}*/ + +pkgArchiveCleaner::pkgArchiveCleaner() : d(NULL) {} +APT_CONST pkgArchiveCleaner::~pkgArchiveCleaner() {}