diff options
Diffstat (limited to 'tools/llvm-ar/ArchiveWriter.cpp')
-rw-r--r-- | tools/llvm-ar/ArchiveWriter.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/tools/llvm-ar/ArchiveWriter.cpp b/tools/llvm-ar/ArchiveWriter.cpp index 332d55f0a4..5563b564b3 100644 --- a/tools/llvm-ar/ArchiveWriter.cpp +++ b/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; |