]> git.saurik.com Git - apt.git/commitdiff
Add a GetListOfFilesInDir() helper method which replaces the old
authorDavid Kalnischkies <kalnischkies@gmail.com>
Sun, 3 Jan 2010 18:37:34 +0000 (19:37 +0100)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Sun, 3 Jan 2010 18:37:34 +0000 (19:37 +0100)
code copies used to load the various parts-files

apt-pkg/contrib/configuration.cc
apt-pkg/contrib/fileutl.cc
apt-pkg/contrib/fileutl.h
apt-pkg/policy.cc
apt-pkg/sourcelist.cc

index ff49ce8576671bf07fc50cef4a083373cf1530e1..89aa854a323cd58ab1991ab8a15caf658fe7f00c 100644 (file)
 #include <apti18n.h>
 
 #include <vector>
-#include <algorithm>
 #include <fstream>
 #include <iostream>
-    
-#include <stdio.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <unistd.h>
 
 using namespace std;
                                                                        /*}}}*/
@@ -837,37 +831,8 @@ bool ReadConfigFile(Configuration &Conf,const string &FName,bool const &AsSectio
 /* */
 bool ReadConfigDir(Configuration &Conf,const string &Dir,bool const &AsSectional,
                   unsigned const &Depth)
-{   
-   DIR *D = opendir(Dir.c_str());
-   if (D == 0)
-      return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str());
-
-   vector<string> List;
-   
-   for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D))
-   {
-      if (Ent->d_name[0] == '.')
-        continue;
-      
-      // Skip bad file names ala run-parts
-      const char *C = Ent->d_name;
-      for (; *C != 0; C++)
-        if (isalpha(*C) == 0 && isdigit(*C) == 0 && *C != '_' && *C != '-')
-           break;
-      if (*C != 0)
-        continue;
-      
-      // Make sure it is a file and not something else
-      string File = flCombine(Dir,Ent->d_name);
-      struct stat St;
-      if (stat(File.c_str(),&St) != 0 || S_ISREG(St.st_mode) == 0)
-        continue;
-      
-      List.push_back(File);      
-   }   
-   closedir(D);
-   
-   sort(List.begin(),List.end());
+{
+   vector<string> const List = GetListOfFilesInDir(Dir, "", true);
 
    // Read the files
    for (vector<string>::const_iterator I = List.begin(); I != List.end(); I++)
index 4240d9f4930b004828b201d72dd7395161060a8d..3adab8fe710e199e8e8d940a052773dc63b90215 100644 (file)
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/wait.h>
+#include <dirent.h>
 #include <signal.h>
 #include <errno.h>
 #include <set>
+#include <algorithm>
                                                                        /*}}}*/
 
 using namespace std;
@@ -195,6 +197,51 @@ bool FileExists(string File)
    return true;
 }
                                                                        /*}}}*/
+// GetListOfFilesInDir - returns a vector of files in the given dir    /*{{{*/
+// ---------------------------------------------------------------------
+/* If an extension is given only files with this extension are included
+   in the returned vector, otherwise every "normal" file is included. */
+std::vector<string> GetListOfFilesInDir(string const &Dir, string const &Ext,
+                               bool const &SortList) {
+       std::vector<string> List;
+       DIR *D = opendir(Dir.c_str());
+       if (D == 0) {
+               _error->Errno("opendir",_("Unable to read %s"),Dir.c_str());
+               return List;
+       }
+
+       for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D)) {
+               if (Ent->d_name[0] == '.')
+                       continue;
+
+               if (Ext.empty() == false && flExtension(Ent->d_name) != Ext)
+                       continue;
+
+               // Skip bad file names ala run-parts
+               const char *C = Ent->d_name;
+               for (; *C != 0; ++C)
+                       if (isalpha(*C) == 0 && isdigit(*C) == 0
+                           && *C != '_' && *C != '-' && *C != '.')
+                               break;
+
+               if (*C != 0)
+                       continue;
+
+               // Make sure it is a file and not something else
+               string const File = flCombine(Dir,Ent->d_name);
+               struct stat St;
+               if (stat(File.c_str(),&St) != 0 || S_ISREG(St.st_mode) == 0)
+                       continue;
+
+               List.push_back(File);
+       }
+       closedir(D);
+
+       if (SortList == true)
+               std::sort(List.begin(),List.end());
+       return List;
+}
+                                                                       /*}}}*/
 // SafeGetCWD - This is a safer getcwd that returns a dynamic string   /*{{{*/
 // ---------------------------------------------------------------------
 /* We return / on failure. */
index 73b5ea3be1a3ed410ba658810cf56e9c940ffa5f..3cbf67fbbacf0a28a49201e4e7c2a7fb13a33e55 100644 (file)
@@ -23,6 +23,7 @@
 
 
 #include <string>
+#include <vector>
 
 using std::string;
 
@@ -81,6 +82,8 @@ bool RunScripts(const char *Cnf);
 bool CopyFile(FileFd &From,FileFd &To);
 int GetLock(string File,bool Errors = true);
 bool FileExists(string File);
+std::vector<string> GetListOfFilesInDir(string const &Dir, string const &Ext,
+                               bool const &SortList);
 string SafeGetCWD();
 void SetCloseExec(int Fd,bool Close);
 void SetNonBlock(int Fd,bool Block);
index 81fdb0431eac789c538ac960a3b1319c6b54bfb7..393181b6d44af815532dd545791f79484a3322ee 100644 (file)
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/tagfile.h>
 #include <apt-pkg/strutl.h>
+#include <apt-pkg/fileutl.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/sptr.h>
-    
+
 #include <apti18n.h>
 
-#include <dirent.h>
-#include <sys/stat.h>
-#include <algorithm>
 #include <iostream>
 #include <sstream>
                                                                        /*}}}*/
@@ -282,36 +280,7 @@ bool ReadPinDir(pkgPolicy &Plcy,string Dir)
       return true;
    }
 
-   DIR *D = opendir(Dir.c_str());
-   if (D == 0)
-      return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str());
-
-   vector<string> List;
-
-   for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D))
-   {
-      if (Ent->d_name[0] == '.')
-        continue;
-
-      // Skip bad file names ala run-parts
-      const char *C = Ent->d_name;
-      for (; *C != 0; C++)
-        if (isalpha(*C) == 0 && isdigit(*C) == 0 && *C != '_' && *C != '-')
-           break;
-      if (*C != 0)
-        continue;
-
-      // Make sure it is a file and not something else
-      string File = flCombine(Dir,Ent->d_name);
-      struct stat St;
-      if (stat(File.c_str(),&St) != 0 || S_ISREG(St.st_mode) == 0)
-        continue;
-
-      List.push_back(File);
-   }
-   closedir(D);
-
-   sort(List.begin(),List.end());
+   vector<string> const List = GetListOfFilesInDir(Dir, "", true);
 
    // Read the files
    for (vector<string>::const_iterator I = List.begin(); I != List.end(); I++)
index 4b3abe918482b557b217101fbf8802ad73541bbc..929259961e966a74b5cb404ecfca57ff67d39c3c 100644 (file)
 #include <apti18n.h>
 
 #include <fstream>
-
-// CNC:2003-03-03 - This is needed for ReadDir stuff.
-#include <algorithm>
-#include <stdio.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <unistd.h>
                                                                        /*}}}*/
 
 using namespace std;
@@ -322,41 +315,7 @@ bool pkgSourceList::GetIndexes(pkgAcquire *Owner, bool GetAll) const
 /* */
 bool pkgSourceList::ReadSourceDir(string Dir)
 {
-   DIR *D = opendir(Dir.c_str());
-   if (D == 0)
-      return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str());
-
-   vector<string> List;
-   
-   for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D))
-   {
-      if (Ent->d_name[0] == '.')
-        continue;
-
-      // CNC:2003-12-02 Only accept .list files as valid sourceparts
-      if (flExtension(Ent->d_name) != "list")
-        continue;
-      
-      // Skip bad file names ala run-parts
-      const char *C = Ent->d_name;
-      for (; *C != 0; C++)
-        if (isalpha(*C) == 0 && isdigit(*C) == 0
-             && *C != '_' && *C != '-' && *C != '.')
-           break;
-      if (*C != 0)
-        continue;
-      
-      // Make sure it is a file and not something else
-      string File = flCombine(Dir,Ent->d_name);
-      struct stat St;
-      if (stat(File.c_str(),&St) != 0 || S_ISREG(St.st_mode) == 0)
-        continue;
-      
-      List.push_back(File);      
-   }   
-   closedir(D);
-   
-   sort(List.begin(),List.end());
+   vector<string> const List = GetListOfFilesInDir(Dir, "list", true);
 
    // Read the files
    for (vector<string>::const_iterator I = List.begin(); I != List.end(); I++)