]> git.saurik.com Git - apt.git/blobdiff - apt-inst/contrib/extracttar.cc
* doc/files.sgml:
[apt.git] / apt-inst / contrib / extracttar.cc
index 4c29757ab110560f6b6795b91a697122ea896ddd..3d2788aafbdf18070e8c3747b962213471be1188 100644 (file)
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/extracttar.h"
-#endif
 #include <apt-pkg/extracttar.h>
 
 #include <apt-pkg/error.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/extracttar.h>
 
 #include <apt-pkg/error.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/configuration.h>
-#include <system.h>
+#include <apt-pkg/macros.h>
 
 #include <stdlib.h>
 #include <unistd.h>
 
 #include <stdlib.h>
 #include <unistd.h>
@@ -136,7 +133,8 @@ bool ExtractTar::StartGzip()
       
       const char *Args[3];
       string confvar = string("dir::bin::") + DecompressProg;
       
       const char *Args[3];
       string confvar = string("dir::bin::") + DecompressProg;
-      Args[0] = _config->Find(confvar.c_str(),DecompressProg.c_str()).c_str();
+      string argv0 = _config->Find(confvar.c_str(),DecompressProg.c_str());
+      Args[0] = argv0.c_str();
       Args[1] = "-d";
       Args[2] = 0;
       execvp(Args[0],(char **)Args);
       Args[1] = "-d";
       Args[2] = 0;
       execvp(Args[0],(char **)Args);
@@ -192,7 +190,7 @@ bool ExtractTar::Go(pkgDirStream &Stream)
         return Done(true);
       
       if (NewSum != CheckSum)
         return Done(true);
       
       if (NewSum != CheckSum)
-        return _error->Error(_("Tar Checksum failed, archive corrupted"));
+        return _error->Error(_("Tar checksum failed, archive corrupted"));
    
       // Decode all of the fields
       pkgDirStream::Item Itm;
    
       // Decode all of the fields
       pkgDirStream::Item Itm;
@@ -210,14 +208,14 @@ bool ExtractTar::Go(pkgDirStream &Stream)
         Itm.Name = (char *)LastLongName.c_str();
       else
       {
         Itm.Name = (char *)LastLongName.c_str();
       else
       {
-        Tar->Name[sizeof(Tar->Name)] = 0;
+        Tar->Name[sizeof(Tar->Name)-1] = 0;
         Itm.Name = Tar->Name;
       }      
       if (Itm.Name[0] == '.' && Itm.Name[1] == '/' && Itm.Name[2] != 0)
         Itm.Name += 2;
       
       // Grab the link target
         Itm.Name = Tar->Name;
       }      
       if (Itm.Name[0] == '.' && Itm.Name[1] == '/' && Itm.Name[2] != 0)
         Itm.Name += 2;
       
       // Grab the link target
-      Tar->Name[sizeof(Tar->LinkName)] = 0;
+      Tar->Name[sizeof(Tar->LinkName)-1] = 0;
       Itm.LinkTarget = Tar->LinkName;
 
       if (LastLongLink.empty() == false)
       Itm.LinkTarget = Tar->LinkName;
 
       if (LastLongLink.empty() == false)
@@ -309,7 +307,7 @@ bool ExtractTar::Go(pkgDirStream &Stream)
       while (Size != 0)
       {
         unsigned char Junk[32*1024];
       while (Size != 0)
       {
         unsigned char Junk[32*1024];
-        unsigned long Read = MIN(Size,sizeof(Junk));
+        unsigned long Read = min(Size,(unsigned long)sizeof(Junk));
         if (InFd.Read(Junk,((Read+511)/512)*512) == false)
            return false;
         
         if (InFd.Read(Junk,((Read+511)/512)*512) == false)
            return false;
         
@@ -334,7 +332,7 @@ bool ExtractTar::Go(pkgDirStream &Stream)
       }
       
       // And finish up
       }
       
       // And finish up
-      if (Itm.Size != 0 && BadRecord == false)
+      if (Itm.Size >= 0 && BadRecord == false)
         if (Stream.FinishedFile(Itm,Fd) == false)
            return false;
       
         if (Stream.FinishedFile(Itm,Fd) == false)
            return false;