summaryrefslogtreecommitdiff
path: root/lib/Archive/ArchiveReader.cpp
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2004-11-19 17:08:00 +0000
committerReid Spencer <rspencer@reidspencer.com>2004-11-19 17:08:00 +0000
commit6405c9ec9f76fd9b8a3b35d2408a74485dc5d00a (patch)
treed62e310720c00381696fbdf95e9df57546274a4c /lib/Archive/ArchiveReader.cpp
parent7b73a663bcf6e88c166dcd4516656d9b3a8e9c85 (diff)
downloadllvm-6405c9ec9f76fd9b8a3b35d2408a74485dc5d00a.tar.gz
llvm-6405c9ec9f76fd9b8a3b35d2408a74485dc5d00a.tar.bz2
llvm-6405c9ec9f76fd9b8a3b35d2408a74485dc5d00a.tar.xz
Correct the computation of when to add the padding. It is not based on the
member's size. It is based on the oddness/evenness of the file pointer. This fixes a bug with llvm-ar not being able to read archives produced by llvm-ranlib when there are members with odd long file name lengths. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17997 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Archive/ArchiveReader.cpp')
-rw-r--r--lib/Archive/ArchiveReader.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/Archive/ArchiveReader.cpp b/lib/Archive/ArchiveReader.cpp
index c0f0d1569b..6f9a75ae7a 100644
--- a/lib/Archive/ArchiveReader.cpp
+++ b/lib/Archive/ArchiveReader.cpp
@@ -227,7 +227,7 @@ Archive::loadArchive() {
// with it. It doesn't count as the "first file".
foreignST = mbr;
At += mbr->getSize();
- if ((mbr->getSize() & 1) == 1)
+ if ((intptr_t(At) & 1) == 1)
At++;
} else if (mbr->isStringTable()) {
// Simply suck the entire string table into a string
@@ -236,7 +236,7 @@ Archive::loadArchive() {
// (SVR4 style long names).
strtab.assign(At,mbr->getSize());
At += mbr->getSize();
- if ((mbr->getSize() & 1) == 1)
+ if ((intptr_t(At) & 1) == 1)
At++;
delete mbr;
} else if (mbr->isLLVMSymbolTable()) {
@@ -247,7 +247,7 @@ Archive::loadArchive() {
parseSymbolTable(mbr->getData(),mbr->getSize());
seenSymbolTable = true;
At += mbr->getSize();
- if ((mbr->getSize() & 1) == 1)
+ if ((intptr_t(At) & 1) == 1)
At++;
delete mbr; // We don't need this member in the list of members.
} else {
@@ -259,7 +259,7 @@ Archive::loadArchive() {
}
members.push_back(mbr);
At += mbr->getSize();
- if ((mbr->getSize() & 1) == 1)
+ if ((intptr_t(At) & 1) == 1)
At++;
}
}
@@ -317,7 +317,7 @@ Archive::loadSymbolTable() {
if (mbr->isForeignSymbolTable()) {
// Skip the foreign symbol table, we don't do anything with it
At += mbr->getSize();
- if ((mbr->getSize() & 1) == 1)
+ if ((intptr_t(At) & 1) == 1)
At++;
delete mbr;
@@ -330,7 +330,7 @@ Archive::loadSymbolTable() {
// Process the string table entry
strtab.assign((const char*)mbr->getData(),mbr->getSize());
At += mbr->getSize();
- if ((mbr->getSize() & 1) == 1)
+ if ((intptr_t(At) & 1) == 1)
At++;
delete mbr;
// Get the next one
@@ -342,7 +342,7 @@ Archive::loadSymbolTable() {
if (mbr->isLLVMSymbolTable()) {
parseSymbolTable(mbr->getData(),mbr->getSize());
FirstFile = At + mbr->getSize();
- if ((mbr->getSize() & 1) == 1)
+ if ((intptr_t(At) & 1) == 1)
FirstFile++;
} else {
// There's no symbol table in the file. We have to rebuild it from scratch
@@ -454,7 +454,7 @@ Archive::findModulesDefiningSymbols(std::set<std::string>& symbols,
// Go to the next file location
At += mbr->getSize();
- if ((mbr->getSize() & 1) == 1)
+ if ((intptr_t(At) & 1) == 1)
At++;
}
}