summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-ar/llvm-ar.cpp
diff options
context:
space:
mode:
authorOwen Reynolds <gbreynoo@gmail.com>2019-08-12 14:00:28 +0000
committerOwen Reynolds <gbreynoo@gmail.com>2019-08-12 14:00:28 +0000
commit47298393d2e4d35480d37b0afdea3e899dc798e2 (patch)
tree6e0a361043e95950771acd4706c0754802558969 /llvm/tools/llvm-ar/llvm-ar.cpp
parentfee242aed415458fa89eaaa0e4ae8a887bd8c874 (diff)
downloadbcm5719-llvm-47298393d2e4d35480d37b0afdea3e899dc798e2.tar.gz
bcm5719-llvm-47298393d2e4d35480d37b0afdea3e899dc798e2.zip
[llvm-ar] Accept file paths with windows format slashes
The internal representation of llvm-ar archives uses linux style slashes for paths, no matter the OS. In the case of windows this meant file paths input intending to match existing members would only match if linux style slashes where used. This change allows either slash direction to be input by the user. This change includes removing an unnecessary call to normalisePath and moving the call of another. Differential Revision: https://reviews.llvm.org/D65743 llvm-svn: 368573
Diffstat (limited to 'llvm/tools/llvm-ar/llvm-ar.cpp')
-rw-r--r--llvm/tools/llvm-ar/llvm-ar.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp
index 7c4cc26ad6d..0817e2db968 100644
--- a/llvm/tools/llvm-ar/llvm-ar.cpp
+++ b/llvm/tools/llvm-ar/llvm-ar.cpp
@@ -474,8 +474,9 @@ static void doDisplayTable(StringRef Name, const object::Archive::Child &C) {
outs() << Name << "\n";
}
-static StringRef normalizePath(StringRef Path) {
- return CompareFullPath ? Path : sys::path::filename(Path);
+static std::string normalizePath(StringRef Path) {
+ return CompareFullPath ? sys::path::convert_to_slash(Path)
+ : sys::path::filename(Path);
}
// Implement the 'x' operation. This function extracts files back to the file
@@ -698,9 +699,8 @@ static InsertAction computeInsertAction(ArchiveOperation Operation,
return IA_MoveOldMember;
if (Operation == ReplaceOrInsert) {
- StringRef PosName = normalizePath(RelPos);
if (!OnlyUpdate) {
- if (PosName.empty())
+ if (RelPos.empty())
return IA_AddNewMember;
return IA_MoveNewMember;
}
@@ -712,12 +712,12 @@ static InsertAction computeInsertAction(ArchiveOperation Operation,
auto ModTimeOrErr = Member.getLastModified();
failIfError(ModTimeOrErr.takeError());
if (Status.getLastModificationTime() < ModTimeOrErr.get()) {
- if (PosName.empty())
+ if (RelPos.empty())
return IA_AddOldMember;
return IA_MoveOldMember;
}
- if (PosName.empty())
+ if (RelPos.empty())
return IA_AddNewMember;
return IA_MoveNewMember;
}
@@ -732,8 +732,8 @@ computeNewArchiveMembers(ArchiveOperation Operation,
std::vector<NewArchiveMember> Ret;
std::vector<NewArchiveMember> Moved;
int InsertPos = -1;
- StringRef PosName = normalizePath(RelPos);
if (OldArchive) {
+ std::string PosName = normalizePath(RelPos);
Error Err = Error::success();
StringMap<int> MemberCount;
for (auto &Child : OldArchive->children(Err)) {
@@ -1009,7 +1009,7 @@ static void runMRIScript() {
ArchiveName = Rest;
break;
case MRICommand::Delete: {
- StringRef Name = normalizePath(Rest);
+ std::string Name = normalizePath(Rest);
llvm::erase_if(NewMembers,
[=](NewArchiveMember &M) { return M.MemberName == Name; });
break;
OpenPOWER on IntegriCloud