diff options
author | Dmitri Gribenko <gribozavr@gmail.com> | 2019-06-03 16:21:37 +0000 |
---|---|---|
committer | Dmitri Gribenko <gribozavr@gmail.com> | 2019-06-03 16:21:37 +0000 |
commit | 857de979a7e43f26973351931b93a3879a09ec5a (patch) | |
tree | 86b92cc246e83d6b219952bd74d98c4ef79155d7 /llvm/lib/Object/ArchiveWriter.cpp | |
parent | 009d08f313c46915930ca617946033a487933b73 (diff) | |
download | bcm5719-llvm-857de979a7e43f26973351931b93a3879a09ec5a.tar.gz bcm5719-llvm-857de979a7e43f26973351931b93a3879a09ec5a.zip |
Revert "[llvm-ar] Fix relative thin archive path handling"
This reverts commit r362407. It broke compilation of
llvm/lib/Object/ArchiveWriter.cpp:
error: type 'llvm::sys::path::const_iterator' does not provide a call
operator
llvm-svn: 362413
Diffstat (limited to 'llvm/lib/Object/ArchiveWriter.cpp')
-rw-r--r-- | llvm/lib/Object/ArchiveWriter.cpp | 51 |
1 files changed, 17 insertions, 34 deletions
diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp index 68c40054bb9..849d2835772 100644 --- a/llvm/lib/Object/ArchiveWriter.cpp +++ b/llvm/lib/Object/ArchiveWriter.cpp @@ -494,46 +494,29 @@ computeMemberData(raw_ostream &StringTable, raw_ostream &SymNames, } namespace llvm { - -static ErrorOr<SmallString<128>> canonicalizePath(StringRef P) { - SmallString<128> Ret = P; - std::error_code Err = sys::fs::make_absolute(Ret); - if (Err) - return Err; - sys::path::remove_dots(Ret, /*removedotdot*/ true); - return Ret; -} - // Compute the relative path from From to To. -Expected<std::string> computeArchiveRelativePath(StringRef From, StringRef To) { - ErrorOr<SmallString<128>> PathToOrErr = canonicalizePath(To); - ErrorOr<SmallString<128>> DirFromOrErr = canonicalizePath(From); - if (!PathToOrErr || !DirFromOrErr) - return errorCodeToError(std::error_code(errno, std::generic_category())); - - const SmallString<128> &PathTo = *PathToOrErr; - const SmallString<128> &DirFrom = sys::path::parent_path(*DirFromOrErr); - - // Can't construct a relative path between different roots - if (sys::path::root_name(PathTo) != sys::path::root_name(DirFrom)) - return sys::path::convert_to_slash(PathTo); - - // Skip common prefixes - auto FromTo = - std::mismatch(sys::path::begin(DirFrom), sys::path::end(DirFrom), - sys::path::begin(PathTo), sys::path::end(PathTo)); - auto FromI = FromTo.first; - auto ToI = FromTo.second; +std::string computeArchiveRelativePath(StringRef From, StringRef To) { + if (sys::path::is_absolute(From) || sys::path::is_absolute(To)) + return To; + + StringRef DirFrom = sys::path::parent_path(From); + auto FromI = sys::path::begin(DirFrom); + auto ToI = sys::path::begin(To); + while (*FromI == *ToI) { + ++FromI; + ++ToI; + } - // Construct relative path SmallString<128> Relative; for (auto FromE = sys::path::end(DirFrom); FromI != FromE; ++FromI) - sys::path::append(Relative, sys::path::Style::posix, ".."); + sys::path::append(Relative, ".."); - for (auto ToE = sys::path::end(PathTo); ToI != ToE; ++ToI) - sys::path::append(Relative, sys::path::Style::posix, *ToI); + for (auto ToE = sys::path::end(To); ToI != ToE; ++ToI) + sys::path::append(Relative, *ToI); - return Relative.str(); + // Replace backslashes with slashes so that the path is portable between *nix + // and Windows. + return sys::path::convert_to_slash(Relative); } Error writeArchive(StringRef ArcName, ArrayRef<NewArchiveMember> NewMembers, |