projects
/
apt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
don't change owner/perms/times through file:// symlinks
[apt.git]
/
apt-inst
/
contrib
/
arfile.cc
diff --git
a/apt-inst/contrib/arfile.cc
b/apt-inst/contrib/arfile.cc
index a1fb97b483b404292eb63d614b2dc2515ffe9fb5..905110781a9afdecd43e5583326ab1a75e762871 100644
(file)
--- a/
apt-inst/contrib/arfile.cc
+++ b/
apt-inst/contrib/arfile.cc
@@
-6,7
+6,7
@@
AR File - Handle an 'AR' archive
AR Archives have plain text headers at the start of each file
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 bound
a
ry.
Information about the structure of AR files can be found in ar(5)
on a BSD system, or in the binutils source.
Information about the structure of AR files can be found in ar(5)
on a BSD system, or in the binutils source.
@@
-14,13
+14,19
@@
##################################################################### */
/*}}}*/
// Include Files /*{{{*/
##################################################################### */
/*}}}*/
// Include Files /*{{{*/
+#include<config.h>
+
#include <apt-pkg/arfile.h>
#include <apt-pkg/strutl.h>
#include <apt-pkg/arfile.h>
#include <apt-pkg/strutl.h>
+#include <apt-pkg/fileutl.h>
#include <apt-pkg/error.h>
#include <apt-pkg/error.h>
-#include <stdlib.h>
- /*}}}*/
+#include <string.h>
+#include <sys/types.h>
+#include <string>
+
#include <apti18n.h>
#include <apti18n.h>
+ /*}}}*/
struct ARArchive::MemberHeader
{
struct ARArchive::MemberHeader
{
@@
-60,7
+66,7
@@
ARArchive::~ARArchive()
byte plain text header then the file data, another header, data, etc */
bool ARArchive::LoadHeaders()
{
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];
// Check the magic byte
char Magic[8];
@@
-87,7
+93,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
@@
-96,13
+102,16
@@
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 >= s
trlen
(S))
+ Len >= s
izeof
(S))
{
delete Memb;
return _error->Error(_("Invalid archive member header"));
}
if (File.Read(S,Len) == false)
{
delete Memb;
return _error->Error(_("Invalid archive member header"));
}
if (File.Read(S,Len) == false)
+ {
+ delete Memb;
return false;
return false;
+ }
S[Len] = 0;
Memb->Name = S;
Memb->Size -= Len;
S[Len] = 0;
Memb->Name = S;
Memb->Size -= Len;
@@
-111,12
+120,12
@@
bool ARArchive::LoadHeaders()
else
{
unsigned int I = sizeof(Head.Name) - 1;
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 = st
d::st
ring(Head.Name,I+1);
}
// Account for the AR header alignment
}
// 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;
// Add it to the list
Memb->Next = List;
@@
-124,7
+133,7
@@
bool ARArchive::LoadHeaders()
Memb->Start = File.Tell();
if (File.Skip(Memb->Size + Skip) == false)
return false;
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;
}
return _error->Error(_("Archive is too short"));
Left -= Memb->Size + Skip;
}