]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/clean.cc
tests: don't do boundless string compares with data()
[apt.git] / apt-pkg / clean.cc
index 6edce5b6db0edf3e57759dc3f8a20055ccac8c21..fe57c26a2287da6015394321a857242b753e27c6 100644 (file)
@@ -38,6 +38,11 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache)
    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());
@@ -54,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;
@@ -106,7 +112,7 @@ 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;
@@ -132,4 +138,5 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache)
 }
                                                                        /*}}}*/
 
+pkgArchiveCleaner::pkgArchiveCleaner() : d(NULL) {}
 APT_CONST pkgArchiveCleaner::~pkgArchiveCleaner() {}