]> git.saurik.com Git - apt.git/blobdiff - ftparchive/multicompress.cc
upload as 0.7.17~exp3
[apt.git] / ftparchive / multicompress.cc
index 932ad6758f80d6c74ee5a72572ea9ad2caafa669..2fc8efcbfe142e3882480d79b9b249be219e1aa3 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: multicompress.cc,v 1.2 2001/02/20 07:03:18 jgg Exp $
+// $Id: multicompress.cc,v 1.4 2003/02/10 07:34:41 doogie Exp $
 /* ######################################################################
 
    MultiCompressor
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
-#ifdef __GNUG__
-#pragma implementation "multicompress.h"
-#endif
-
 #include "multicompress.h"
     
+#include <apti18n.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/md5.h>
 #include <sys/stat.h>
 #include <utime.h>
 #include <unistd.h>
+#include <iostream>    
                                                                        /*}}}*/
 
+using namespace std;
+
 const MultiCompress::CompType MultiCompress::Compressors[] =
       {{".","",0,0,0,1},
        {"gzip",".gz","gzip","-9n","-d",2},
        {"bzip2",".bz2","bzip2","-9","-d",3},
+       {"lzma",".lzma","lzma","-9","-d",4},
        {}};
 
 // MultiCompress::MultiCompress - Constructor                          /*{{{*/
@@ -68,7 +69,7 @@ MultiCompress::MultiCompress(string Output,string Compress,
       // Hmm.. unknown.
       if (Comp->Name == 0)
       {
-        _error->Warning("Unknown Compresison Algorithm '%s'",string(Start,I).c_str());
+        _error->Warning(_("Unknown compression algorithm '%s'"),string(Start,I).c_str());
         continue;
       }
       
@@ -98,7 +99,7 @@ MultiCompress::MultiCompress(string Output,string Compress,
 
    if (Outputs == 0)
    {
-      _error->Error("Compressed output %s needs a compression set",Output.c_str());
+      _error->Error(_("Compressed output %s needs a compression set"),Output.c_str());
       return;
    }
 
@@ -165,7 +166,7 @@ bool MultiCompress::Start()
    // Create a data pipe
    int Pipe[2] = {-1,-1};
    if (pipe(Pipe) != 0)
-      return _error->Errno("pipe","Failed to create IPC pipe to subprocess");
+      return _error->Errno("pipe",_("Failed to create IPC pipe to subprocess"));
    for (int I = 0; I != 2; I++)
       SetCloseExec(Pipe[I],true);
    
@@ -191,10 +192,10 @@ bool MultiCompress::Start()
    close(Pipe[0]);
    Input = fdopen(Pipe[1],"w");
    if (Input == 0)
-      return _error->Errno("fdopen","Failed to create FILE*");
+      return _error->Errno("fdopen",_("Failed to create FILE*"));
    
    if (Outputter == -1)
-      return _error->Errno("fork","Failed to fork");   
+      return _error->Errno("fork",_("Failed to fork"));   
    return true;
 }
                                                                        /*}}}*/
@@ -208,7 +209,7 @@ bool MultiCompress::Die()
    
    fclose(Input);
    Input = 0;
-   bool Res = ExecWait(Outputter,"Compress Child",false);
+   bool Res = ExecWait(Outputter,_("Compress child"),false);
    Outputter = -1;
    return Res;
 }
@@ -231,7 +232,7 @@ bool MultiCompress::Finalize(unsigned long &OutSize)
    {
       struct stat St;
       if (stat(I->Output.c_str(),&St) != 0)
-        return  _error->Error("Internal Error, Failed to create %s",
+        return  _error->Error(_("Internal error, failed to create %s"),
                               I->Output.c_str());
       
       if (I->OldMTime != St.st_mtime)
@@ -267,7 +268,7 @@ bool MultiCompress::Finalize(unsigned long &OutSize)
 /* This opens the compressor, either in compress mode or decompress 
    mode. FileFd is always the compressor input/output file, 
    OutFd is the created pipe, Input for Compress, Output for Decompress. */
-bool MultiCompress::OpenCompress(const CompType *Prog,int &Pid,int FileFd,
+bool MultiCompress::OpenCompress(const CompType *Prog,pid_t &Pid,int FileFd,
                                 int &OutFd,bool Comp)
 {
    Pid = -1;
@@ -282,7 +283,7 @@ bool MultiCompress::OpenCompress(const CompType *Prog,int &Pid,int FileFd,
    // Create a data pipe
    int Pipe[2] = {-1,-1};
    if (pipe(Pipe) != 0)
-      return _error->Errno("pipe","Failed to create subprocess IPC");
+      return _error->Errno("pipe",_("Failed to create subprocess IPC"));
    for (int J = 0; J != 2; J++)
       SetCloseExec(Pipe[J],true);
 
@@ -317,7 +318,7 @@ bool MultiCompress::OpenCompress(const CompType *Prog,int &Pid,int FileFd,
         Args[1] = Prog->UnCompArgs;
       Args[2] = 0;
       execvp(Args[0],(char **)Args);
-      cerr << "Failed to exec compressor " << Args[0] << endl;
+      cerr << _("Failed to exec compressor ") << Args[0] << endl;
       _exit(100);
    };      
    if (Comp == true)
@@ -330,7 +331,7 @@ bool MultiCompress::OpenCompress(const CompType *Prog,int &Pid,int FileFd,
 // MultiCompress::OpenOld - Open an old file                           /*{{{*/
 // ---------------------------------------------------------------------
 /* This opens one of the original output files, possibly decompressing it. */
-bool MultiCompress::OpenOld(int &Fd,int &Proc)
+bool MultiCompress::OpenOld(int &Fd,pid_t &Proc)
 {
    Files *Best = Outputs;
    for (Files *I = Outputs; I != 0; I = I->Next)
@@ -352,11 +353,11 @@ bool MultiCompress::OpenOld(int &Fd,int &Proc)
 // MultiCompress::CloseOld - Close the old file                                /*{{{*/
 // ---------------------------------------------------------------------
 /* */
-bool MultiCompress::CloseOld(int Fd,int Proc)
+bool MultiCompress::CloseOld(int Fd,pid_t Proc)
 {
    close(Fd);
    if (Proc != -1)
-      if (ExecWait(Proc,"decompressor",false) == false)
+      if (ExecWait(Proc,_("decompressor"),false) == false)
         return false;
    return true;
 }   
@@ -399,7 +400,7 @@ bool MultiCompress::Child(int FD)
       {
         if (write(I->Fd,Buffer,Res) != Res)
         {
-           _error->Errno("write","IO to subprocess/file failed");
+           _error->Errno("write",_("IO to subprocess/file failed"));
            break;
         }
       }      
@@ -435,7 +436,7 @@ bool MultiCompress::Child(int FD)
    while (Missing == false)
    {
       int CompFd = -1;
-      int Proc = -1;
+      pid_t Proc = -1;
       if (OpenOld(CompFd,Proc) == false)
       {
         _error->Discard();
@@ -451,7 +452,7 @@ bool MultiCompress::Child(int FD)
         if (Res == 0)
            break;
         if (Res < 0)
-           return _error->Errno("read","Failed to read while computing MD5");
+           return _error->Errno("read",_("Failed to read while computing MD5"));
         NewFileSize += Res;
         OldMD5.Add(Buffer,Res);
       }
@@ -468,7 +469,7 @@ bool MultiCompress::Child(int FD)
         {
            I->TmpFile.Close();
            if (unlink(I->TmpFile.Name().c_str()) != 0)
-              _error->Errno("unlink","Problem unlinking %s",
+              _error->Errno("unlink",_("Problem unlinking %s"),
                             I->TmpFile.Name().c_str());
         }
         return !_error->PendingError();
@@ -483,7 +484,7 @@ bool MultiCompress::Child(int FD)
       fchmod(I->TmpFile.Fd(),Permissions);
       
       if (rename(I->TmpFile.Name().c_str(),I->Output.c_str()) != 0)
-        _error->Errno("rename","Failed to rename %s to %s",
+        _error->Errno("rename",_("Failed to rename %s to %s"),
                       I->TmpFile.Name().c_str(),I->Output.c_str());
       I->TmpFile.Close();
    }