summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/FileManager.cpp
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2018-04-27 20:29:57 +0000
committerNico Weber <nicolasweber@gmx.de>2018-04-27 20:29:57 +0000
commit6bc635ef56b9589a70e87737e788d9895e3cd0e4 (patch)
treef168ff40618cffbc1848aed4d795f9720327ff63 /clang/lib/Basic/FileManager.cpp
parenta19ee7d7b63453f612f162de0be001ec384c2174 (diff)
downloadbcm5719-llvm-6bc635ef56b9589a70e87737e788d9895e3cd0e4.tar.gz
bcm5719-llvm-6bc635ef56b9589a70e87737e788d9895e3cd0e4.zip
Revert r329698 (and r329702).
Speculative. ClangMoveTests started failing on http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/9958 after this change. I can't reproduce on my machine, let's see if it was due to this change. llvm-svn: 331077
Diffstat (limited to 'clang/lib/Basic/FileManager.cpp')
-rw-r--r--clang/lib/Basic/FileManager.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp
index 6fc00d9f413..719b2f66515 100644
--- a/clang/lib/Basic/FileManager.cpp
+++ b/clang/lib/Basic/FileManager.cpp
@@ -534,9 +534,23 @@ StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) {
StringRef CanonicalName(Dir->getName());
- SmallString<256> CanonicalNameBuf;
- if (!llvm::sys::fs::real_path(Dir->getName(), CanonicalNameBuf))
+#ifdef LLVM_ON_UNIX
+ char CanonicalNameBuf[PATH_MAX];
+ if (realpath(Dir->getName().str().c_str(), CanonicalNameBuf))
CanonicalName = StringRef(CanonicalNameBuf).copy(CanonicalNameStorage);
+#else
+ SmallString<256> CanonicalNameBuf(CanonicalName);
+ llvm::sys::fs::make_absolute(CanonicalNameBuf);
+ llvm::sys::path::native(CanonicalNameBuf);
+ // We've run into needing to remove '..' here in the wild though, so
+ // remove it.
+ // On Windows, symlinks are significantly less prevalent, so removing
+ // '..' is pretty safe.
+ // Ideally we'd have an equivalent of `realpath` and could implement
+ // sys::fs::canonical across all the platforms.
+ llvm::sys::path::remove_dots(CanonicalNameBuf, /* remove_dot_dot */ true);
+ CanonicalName = StringRef(CanonicalNameBuf).copy(CanonicalNameStorage);
+#endif
CanonicalDirNames.insert(std::make_pair(Dir, CanonicalName));
return CanonicalName;
OpenPOWER on IntegriCloud