summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/modularize/ModularizeUtilities.cpp
diff options
context:
space:
mode:
authorJohn Thompson <John.Thompson.JTSoftware@gmail.com>2015-02-26 19:31:10 +0000
committerJohn Thompson <John.Thompson.JTSoftware@gmail.com>2015-02-26 19:31:10 +0000
commitb70ecf6eefb7a85892c760f72d493e9717a5dedd (patch)
tree560eaef2247b2ac66ad5f351566b83ff48c70e03 /clang-tools-extra/modularize/ModularizeUtilities.cpp
parentf8ef71c17eae137d19fed3c147bb503fe4a5e5be (diff)
downloadbcm5719-llvm-b70ecf6eefb7a85892c760f72d493e9717a5dedd.tar.gz
bcm5719-llvm-b70ecf6eefb7a85892c760f72d493e9717a5dedd.zip
Fixed canonical path function.
llvm-svn: 230665
Diffstat (limited to 'clang-tools-extra/modularize/ModularizeUtilities.cpp')
-rw-r--r--clang-tools-extra/modularize/ModularizeUtilities.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/clang-tools-extra/modularize/ModularizeUtilities.cpp b/clang-tools-extra/modularize/ModularizeUtilities.cpp
index 60388006187..50dd8b1f258 100644
--- a/clang-tools-extra/modularize/ModularizeUtilities.cpp
+++ b/clang-tools-extra/modularize/ModularizeUtilities.cpp
@@ -341,13 +341,31 @@ bool ModularizeUtilities::collectUmbrellaHeaders(StringRef UmbrellaDirName,
}
return true;
}
+
+std::string normalize(StringRef Path) {
+ SmallString<128> Buffer;
+ llvm::sys::path::const_iterator B = llvm::sys::path::begin(Path),
+ E = llvm::sys::path::end(Path);
+ while (B != E) {
+ if (B->compare(".") == 0) {
+ }
+ else if (B->compare("..") == 0)
+ llvm::sys::path::remove_filename(Buffer);
+ else
+ llvm::sys::path::append(Buffer, *B);
+ ++B;
+ }
+ if (Path.endswith("/") || Path.endswith("\\"))
+ Buffer.append(1, Path.back());
+ return Buffer.c_str();
+}
// Convert header path to canonical form.
// The canonical form is basically just use forward slashes, and remove "./".
// \param FilePath The file path, relative to the module map directory.
// \returns The file path in canonical form.
std::string ModularizeUtilities::getCanonicalPath(StringRef FilePath) {
- std::string Tmp(FilePath);
+ std::string Tmp(normalize(FilePath));
std::replace(Tmp.begin(), Tmp.end(), '\\', '/');
StringRef Tmp2(Tmp);
if (Tmp2.startswith("./"))
OpenPOWER on IntegriCloud