]> git.saurik.com Git - apt.git/blobdiff - apt-inst/contrib/arfile.cc
* [ABI-Break] Implement EDSP in libapt-pkg so that all front-ends which
[apt.git] / apt-inst / contrib / arfile.cc
index b423eb4cbf92c83c7845dda5a4cdb0b230552215..8018f4d30792dd99a4fc67da30850f05081edce1 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: arfile.cc,v 1.6 2003/07/18 14:15:11 mdz Exp $
+// $Id: arfile.cc,v 1.6.2.1 2004/01/16 18:58:50 mdz Exp $
 /* ######################################################################
 
    AR File - Handle an 'AR' archive
 /* ######################################################################
 
    AR File - Handle an 'AR' archive
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/arfile.h"
-#endif
-#include <apti18n.h>
 #include <apt-pkg/arfile.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/error.h>
 
 #include <stdlib.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
 {
 
 struct ARArchive::MemberHeader
 {
@@ -90,7 +87,7 @@ bool ARArchive::LoadHeaders()
          StrToNum(Head.Size,Memb->Size,sizeof(Head.Size)) == false)
       {
         delete Memb;
          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
       }
         
       // Check for an extra long name string
@@ -99,7 +96,7 @@ bool ARArchive::LoadHeaders()
         char S[300];
         unsigned long Len;
         if (StrToNum(Head.Name+3,Len,sizeof(Head.Size)-3) == false ||
         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"));
         {
            delete Memb;
            return _error->Error(_("Invalid archive member header"));
@@ -114,7 +111,7 @@ bool ARArchive::LoadHeaders()
       else
       {
         unsigned int I = sizeof(Head.Name) - 1;
       else
       {
         unsigned int I = sizeof(Head.Name) - 1;
-        for (; Head.Name[I] == ' '; I--);
+        for (; Head.Name[I] == ' ' || Head.Name[I] == '/'; I--);
         Memb->Name = string(Head.Name,I+1);
       }
 
         Memb->Name = string(Head.Name,I+1);
       }