diff options
Diffstat (limited to 'apt-inst/contrib')
-rw-r--r-- | apt-inst/contrib/extracttar.cc | 12 | ||||
-rw-r--r-- | apt-inst/contrib/extracttar.h | 3 |
2 files changed, 9 insertions, 6 deletions
diff --git a/apt-inst/contrib/extracttar.cc b/apt-inst/contrib/extracttar.cc index 63bb2ba80..b719d5b81 100644 --- a/apt-inst/contrib/extracttar.cc +++ b/apt-inst/contrib/extracttar.cc @@ -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); } diff --git a/apt-inst/contrib/extracttar.h b/apt-inst/contrib/extracttar.h index aaca987f2..ec930ca22 100644 --- a/apt-inst/contrib/extracttar.h +++ b/apt-inst/contrib/extracttar.h @@ -38,6 +38,7 @@ class ExtractTar int GZPid; FileFd InFd; bool Eof; + string DecompressProg; // Fork and reap gzip bool StartGzip(); @@ -47,7 +48,7 @@ class ExtractTar bool Go(pkgDirStream &Stream); - ExtractTar(FileFd &Fd,unsigned long Max); + ExtractTar(FileFd &Fd,unsigned long Max,string DecompressionProgram); virtual ~ExtractTar(); }; |