]> git.saurik.com Git - apt.git/blobdiff - apt-inst/contrib/extracttar.cc
* merged changes from the conference
[apt.git] / apt-inst / contrib / extracttar.cc
index 63bb2ba804ba53827512e0a0920798bd8db531e4..4c29757ab110560f6b6795b91a697122ea896ddd 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: extracttar.cc,v 1.9 2004/01/07 20:39:37 mdz Exp $
+// $Id: extracttar.cc,v 1.8.2.1 2004/01/16 18:58:50 mdz Exp $
 /* ######################################################################
 
    Extract a Tar - Tar Extractor
@@ -58,8 +58,8 @@ struct ExtractTar::TarHeader
 // ExtractTar::ExtractTar - Constructor                                        /*{{{*/
 // ---------------------------------------------------------------------
 /* */
-ExtractTar::ExtractTar(FileFd &Fd,unsigned long Max) : File(Fd), 
-                         MaxInSize(Max)
+ExtractTar::ExtractTar(FileFd &Fd,unsigned long Max,string DecompressionProgram) : File(Fd), 
+                         MaxInSize(Max), DecompressProg(DecompressionProgram)
 
 {
    GZPid = -1;
@@ -93,7 +93,8 @@ bool ExtractTar::Done(bool Force)
    
    // Make sure we clean it up!
    kill(GZPid,SIGINT);
-   if (ExecWait(GZPid,_config->Find("dir::bin::gzip","/bin/gzip").c_str(),
+   string confvar = string("dir::bin::") + DecompressProg;
+   if (ExecWait(GZPid,_config->Find(confvar.c_str(),DecompressProg.c_str()).c_str(),
                Force) == false)
    {
       GZPid = -1;
@@ -134,10 +135,11 @@ bool ExtractTar::StartGzip()
       SetCloseExec(STDERR_FILENO,false);
       
       const char *Args[3];
-      Args[0] = _config->Find("dir::bin::gzip","/bin/gzip").c_str();
+      string confvar = string("dir::bin::") + DecompressProg;
+      Args[0] = _config->Find(confvar.c_str(),DecompressProg.c_str()).c_str();
       Args[1] = "-d";
       Args[2] = 0;
-      execv(Args[0],(char **)Args);
+      execvp(Args[0],(char **)Args);
       cerr << _("Failed to exec gzip ") << Args[0] << endl;
       _exit(100);
    }