Add a comment explaining differing Windows behavior.

llvm-svn: 243625
This commit is contained in:
Sean Silva
2015-07-30 07:30:24 +00:00
parent 5a45222745
commit de3816655a

View File

@@ -568,7 +568,13 @@ StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) {
SmallString<256> CanonicalNameBuf(CanonicalName);
llvm::sys::fs::make_absolute(CanonicalNameBuf);
llvm::sys::path::native(CanonicalNameBuf);
removeDotPaths(CanonicalNameBuf, true);
// 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.
removeDotPaths(CanonicalNameBuf, /*RemoveDotDot*/true);
char *Mem = CanonicalNameStorage.Allocate<char>(CanonicalNameBuf.size());
memcpy(Mem, CanonicalNameBuf.data(), CanonicalNameBuf.size());
CanonicalName = StringRef(Mem, CanonicalNameBuf.size());