summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-ar/ArchiveWriter.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-06-20 13:23:48 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-06-20 13:23:48 +0000
commit73dd376467074dffb3a3243985e3b2af10079f3a (patch)
tree318186ad5ae3eb3cab12c5e7b57922ef5e37a174 /llvm/tools/llvm-ar/ArchiveWriter.cpp
parent2a65c32094201fad938137cfbde654ad2820adba (diff)
downloadbcm5719-llvm-73dd376467074dffb3a3243985e3b2af10079f3a.tar.gz
bcm5719-llvm-73dd376467074dffb3a3243985e3b2af10079f3a.zip
Revert "Don't include directory names in archives."
This reverts commit 184420. Investigating the bot failures. llvm-svn: 184421
Diffstat (limited to 'llvm/tools/llvm-ar/ArchiveWriter.cpp')
-rw-r--r--llvm/tools/llvm-ar/ArchiveWriter.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/llvm/tools/llvm-ar/ArchiveWriter.cpp b/llvm/tools/llvm-ar/ArchiveWriter.cpp
index 332d55f0a44..5563b564b39 100644
--- a/llvm/tools/llvm-ar/ArchiveWriter.cpp
+++ b/llvm/tools/llvm-ar/ArchiveWriter.cpp
@@ -98,7 +98,13 @@ Archive::fillHeader(const ArchiveMember &mbr, ArchiveMemberHeader& hdr,
sprintf(buffer,"%-12u", unsigned(secondsSinceEpoch));
memcpy(hdr.date,buffer,12);
- std::string mbrPath = sys::path::filename(mbr.getPath());
+ // Get rid of trailing blanks in the name
+ std::string mbrPath = mbr.getPath().str();
+ size_t mbrLen = mbrPath.length();
+ while (mbrLen > 0 && mbrPath[mbrLen-1] == ' ') {
+ mbrPath.erase(mbrLen-1,1);
+ mbrLen--;
+ }
// Set the name field in one of its various flavors.
bool writeLongName = false;
@@ -159,8 +165,8 @@ bool Archive::addFileBefore(StringRef filePath, iterator where,
ArchiveMember* mbr = new ArchiveMember(this);
mbr->data = 0;
- mbr->path = filePath;
- sys::PathWithStatus PWS(filePath);
+ mbr->path = filePath.str();
+ sys::PathWithStatus PWS(mbr->path);
const sys::FileStatus *FSInfo = PWS.getFileStatus(false, ErrMsg);
if (!FSInfo) {
delete mbr;
@@ -173,7 +179,10 @@ bool Archive::addFileBefore(StringRef filePath, iterator where,
mbr->Size = FSInfo->getSize();
unsigned flags = 0;
- if (sys::path::filename(filePath).size() > 15)
+ bool hasSlash = filePath.str().find('/') != std::string::npos;
+ if (hasSlash)
+ flags |= ArchiveMember::HasPathFlag;
+ if (hasSlash || filePath.str().length() > 15)
flags |= ArchiveMember::HasLongFilenameFlag;
sys::fs::file_magic type;
OpenPOWER on IntegriCloud