]> git.saurik.com Git - apt.git/commitdiff
* ftparchive/writer.{cc,h}:
authorMichael Vogt <michael.vogt@ubuntu.com>
Mon, 25 Jan 2010 16:34:02 +0000 (17:34 +0100)
committerMichael Vogt <michael.vogt@ubuntu.com>
Mon, 25 Jan 2010 16:34:02 +0000 (17:34 +0100)
  - merge crash fix for apt-ftparchive on hurd, thanks to
    Samuel Thibault for the patch (closes: #566664)

debian/changelog
ftparchive/writer.cc
ftparchive/writer.h

index b89a88b87c3169f8fceb3ac22f9098afe3156321..39798f6351cc2f486f6a3c715b92ad4bf75faf79 100644 (file)
@@ -10,6 +10,9 @@ apt (0.7.25.2) UNRELEASED; urgency=low
     - merge fix from Gene Cash that supports markauto for
       packages that are not in the extended_states file yet
       (closes: #534920)
+  * ftparchive/writer.{cc,h}:
+    - merge crash fix for apt-ftparchive on hurd, thanks to 
+      Samuel Thibault for the patch (closes: #566664)
 
   [ David Kalnischkies ]
   * apt-pkg/contrib/fileutl.cc:
index 4e6c9a77ddab6d2049d83ab1334b773de3e4742c..b46152a9d5e17465446e9bcda2b6573e0d231e90 100644 (file)
@@ -58,10 +58,6 @@ FTWScanner::FTWScanner()
 {
    ErrorPrinted = false;
    NoLinkAct = !_config->FindB("APT::FTPArchive::DeLinkAct",true);
-   RealPath = 0;
-   long PMax = pathconf(".",_PC_PATH_MAX);
-   if (PMax > 0)
-      RealPath = new char[PMax];
 }
                                                                        /*}}}*/
 // FTWScanner::Scanner - FTW Scanner                                   /*{{{*/
@@ -92,6 +88,8 @@ int FTWScanner::ScannerFTW(const char *File,const struct stat *sb,int Flag)
 int FTWScanner::ScannerFile(const char *File, bool ReadLink)
 {
    const char *LastComponent = strrchr(File, '/');
+   char *RealPath = NULL;
+
    if (LastComponent == NULL)
       LastComponent = File;
    else
@@ -111,10 +109,13 @@ int FTWScanner::ScannerFile(const char *File, bool ReadLink)
       given are not links themselves. */
    char Jnk[2];
    Owner->OriginalPath = File;
-   if (ReadLink && Owner->RealPath != 0 &&
+   if (ReadLink &&
        readlink(File,Jnk,sizeof(Jnk)) != -1 &&
-       realpath(File,Owner->RealPath) != 0)
-      Owner->DoPackage(Owner->RealPath);
+       (RealPath = realpath(File,NULL)) != 0)
+   {
+      Owner->DoPackage(RealPath);
+      free(RealPath);
+   }
    else
       Owner->DoPackage(File);
    
@@ -150,13 +151,15 @@ int FTWScanner::ScannerFile(const char *File, bool ReadLink)
 /* */
 bool FTWScanner::RecursiveScan(string Dir)
 {
+   char *RealPath = NULL;
    /* If noprefix is set then jam the scan root in, so we don't generate
       link followed paths out of control */
    if (InternalPrefix.empty() == true)
    {
-      if (realpath(Dir.c_str(),RealPath) == 0)
+      if ((RealPath = realpath(Dir.c_str(),NULL)) == 0)
         return _error->Errno("realpath",_("Failed to resolve %s"),Dir.c_str());
-      InternalPrefix = RealPath;      
+      InternalPrefix = RealPath;
+      free(RealPath);
    }
    
    // Do recursive directory searching
@@ -180,13 +183,15 @@ bool FTWScanner::RecursiveScan(string Dir)
    of files from another file. */
 bool FTWScanner::LoadFileList(string Dir,string File)
 {
+   char *RealPath = NULL;
    /* If noprefix is set then jam the scan root in, so we don't generate
       link followed paths out of control */
    if (InternalPrefix.empty() == true)
    {
-      if (realpath(Dir.c_str(),RealPath) == 0)
+      if ((RealPath = realpath(Dir.c_str(),NULL)) == 0)
         return _error->Errno("realpath",_("Failed to resolve %s"),Dir.c_str());
       InternalPrefix = RealPath;      
+      free(RealPath);
    }
    
    Owner = this;
@@ -668,6 +673,7 @@ bool SourcesWriter::DoPackage(string FileName)
    // Perform the delinking operation over all of the files
    string ParseJnk;
    const char *C = Files;
+   char *RealPath = NULL;
    for (;isspace(*C); C++);
    while (*C != 0)
    {   
@@ -679,10 +685,11 @@ bool SourcesWriter::DoPackage(string FileName)
       
       char Jnk[2];
       string OriginalPath = Directory + ParseJnk;
-      if (RealPath != 0 && readlink(OriginalPath.c_str(),Jnk,sizeof(Jnk)) != -1 &&
-         realpath(OriginalPath.c_str(),RealPath) != 0)
+      if (readlink(OriginalPath.c_str(),Jnk,sizeof(Jnk)) != -1 &&
+         (RealPath = realpath(OriginalPath.c_str(),NULL)) != 0)
       {
         string RP = RealPath;
+        free(RealPath);
         if (Delink(RP,OriginalPath.c_str(),Stats.DeLinkBytes,St.st_size) == false)
            return false;
       }
index e7643890056fed1c0a54c2ea2a72e044f70673da..9aaadbdab70e85f917586665ed04d13254ec66d2 100644 (file)
@@ -35,7 +35,6 @@ class FTWScanner
    protected:
    vector<string> Patterns;
    const char *OriginalPath;
-   char *RealPath;
    bool ErrorPrinted;
    
    // Stuff for the delinker
@@ -70,7 +69,6 @@ class FTWScanner
    bool SetExts(string Vals);
       
    FTWScanner();
-   virtual ~FTWScanner() {delete [] RealPath;};
 };
 
 class PackagesWriter : public FTWScanner