]> git.saurik.com Git - apt.git/blobdiff - apt-inst/contrib/arfile.cc
Fix typos in documentation (codespell)
[apt.git] / apt-inst / contrib / arfile.cc
index 27d4d9ba4100876fb063ed1d7ac26848aac0e849..77dbc55d64a56fbefc840d3deb9520bc39bd51f1 100644 (file)
@@ -1,12 +1,12 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: arfile.cc,v 1.5 2003/02/10 00:36:12 doogie Exp $
+// $Id: arfile.cc,v 1.6.2.1 2004/01/16 18:58:50 mdz Exp $
 /* ######################################################################
 
    AR File - Handle an 'AR' archive
    
    AR Archives have plain text headers at the start of each file
-   section. The headers are aligned on a 2 byte boundry.
+   section. The headers are aligned on a 2 byte boundary.
    
    Information about the structure of AR files can be found in ar(5)
    on a BSD system, or in the binutils source.
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/arfile.h"
-#endif
-#include <apti18n.h>
+#include<config.h>
+
 #include <apt-pkg/arfile.h>
 #include <apt-pkg/strutl.h>
+#include <apt-pkg/fileutl.h>
 #include <apt-pkg/error.h>
 
 #include <stdlib.h>
+
+#include <apti18n.h>
                                                                        /*}}}*/
 
 struct ARArchive::MemberHeader
@@ -63,7 +64,7 @@ ARArchive::~ARArchive()
    byte plain text header then the file data, another header, data, etc */
 bool ARArchive::LoadHeaders()
 {
-   signed long Left = File.Size();
+   off_t Left = File.Size();
    
    // Check the magic byte
    char Magic[8];
@@ -90,7 +91,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
@@ -99,13 +100,16 @@ 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"));
         }
         if (File.Read(S,Len) == false)
+        {
+           delete Memb;
            return false;
+        }
         S[Len] = 0;
         Memb->Name = S;
         Memb->Size -= Len;
@@ -114,12 +118,12 @@ 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 = std::string(Head.Name,I+1);
       }
 
       // Account for the AR header alignment 
-      unsigned Skip = Memb->Size % 2;
+      off_t Skip = Memb->Size % 2;
       
       // Add it to the list
       Memb->Next = List;
@@ -127,7 +131,7 @@ bool ARArchive::LoadHeaders()
       Memb->Start = File.Tell();
       if (File.Skip(Memb->Size + Skip) == false)
         return false;
-      if (Left < (signed)(Memb->Size + Skip))
+      if (Left < (off_t)(Memb->Size + Skip))
         return _error->Error(_("Archive is too short"));
       Left -= Memb->Size + Skip;
    }