// -*- 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
##################################################################### */
/*}}}*/
// 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
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
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"));
else
{
unsigned int I = sizeof(Head.Name) - 1;
- for (; Head.Name[I] == ' '; I--);
- Memb->Name = string(Head.Name,I+1);
+ for (; Head.Name[I] == ' ' || Head.Name[I] == '/'; I--);
+ Memb->Name = std::string(Head.Name,I+1);
}
// Account for the AR header alignment