]> git.saurik.com Git - apt.git/blobdiff - apt-inst/contrib/arfile.cc
Support large files in the complete toolset. Indexes of this
[apt.git] / apt-inst / contrib / arfile.cc
index c2964b7a9d24bca5151ce209b92c8ba2799fdcd2..533c563f9a05ff5418353570e0ca6f803e8169e4 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: arfile.cc,v 1.2 2001/02/20 07:03:16 jgg Exp $
+// $Id: arfile.cc,v 1.6.2.1 2004/01/16 18:58:50 mdz Exp $
 /* ######################################################################
 
    AR File - Handle an 'AR' archive
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/arfile.h"
-#endif
+#include<config.h>
+
 #include <apt-pkg/arfile.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/error.h>
 
 #include <stdlib.h>
+
+#include <apti18n.h>
                                                                        /*}}}*/
 
 struct ARArchive::MemberHeader
@@ -69,7 +70,7 @@ bool ARArchive::LoadHeaders()
    if (File.Read(Magic,sizeof(Magic)) == false)
       return false;
    if (memcmp(Magic,"!<arch>\012",sizeof(Magic)) != 0)
-      return _error->Error("Invalid archive signature");
+      return _error->Error(_("Invalid archive signature"));
    Left -= sizeof(Magic);
    
    // Read the member list
@@ -77,7 +78,7 @@ bool ARArchive::LoadHeaders()
    {
       MemberHeader Head;
       if (File.Read(&Head,sizeof(Head)) == false)
-        return _error->Error("Error reading archive member header");
+        return _error->Error(_("Error reading archive member header"));
       Left -= sizeof(Head);
 
       // Convert all of the integer members
@@ -89,7 +90,7 @@ bool ARArchive::LoadHeaders()
          StrToNum(Head.Size,Memb->Size,sizeof(Head.Size)) == false)
       {
         delete Memb;
-        return _error->Error("Invalid archive member header");
+        return _error->Error(_("Invalid archive member header %s"), Head.Name);
       }
         
       // Check for an extra long name string
@@ -98,10 +99,10 @@ bool ARArchive::LoadHeaders()
         char S[300];
         unsigned long Len;
         if (StrToNum(Head.Name+3,Len,sizeof(Head.Size)-3) == false ||
-            Len >= strlen(S))
+            Len >= sizeof(S))
         {
            delete Memb;
-           return _error->Error("Invalid archive member header");
+           return _error->Error(_("Invalid archive member header"));
         }
         if (File.Read(S,Len) == false)
            return false;
@@ -113,8 +114,8 @@ bool ARArchive::LoadHeaders()
       else
       {
         unsigned int I = sizeof(Head.Name) - 1;
-        for (; Head.Name[I] == ' '; I--);
-        Memb->Name = string(Head.Name,0,I+1);
+        for (; Head.Name[I] == ' ' || Head.Name[I] == '/'; I--);
+        Memb->Name = string(Head.Name,I+1);
       }
 
       // Account for the AR header alignment 
@@ -127,11 +128,11 @@ bool ARArchive::LoadHeaders()
       if (File.Skip(Memb->Size + Skip) == false)
         return false;
       if (Left < (signed)(Memb->Size + Skip))
-        return _error->Error("Archive is too short");
+        return _error->Error(_("Archive is too short"));
       Left -= Memb->Size + Skip;
    }   
    if (Left != 0)
-      return _error->Error("Failed to read the archive headers");
+      return _error->Error(_("Failed to read the archive headers"));
    
    return true;
 }