summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/Path.cpp
diff options
context:
space:
mode:
authorSerge Pavlov <sepavloff@gmail.com>2017-03-01 09:38:15 +0000
committerSerge Pavlov <sepavloff@gmail.com>2017-03-01 09:38:15 +0000
commit9c761a36b9a93bff188109502231cc60b96894e1 (patch)
tree75c603995f27e844d79e81c6bd9a923e5df20365 /llvm/lib/Support/Path.cpp
parent6e50fd53d4fa732a506d937908811e34e1addd7f (diff)
downloadbcm5719-llvm-9c761a36b9a93bff188109502231cc60b96894e1.tar.gz
bcm5719-llvm-9c761a36b9a93bff188109502231cc60b96894e1.zip
Process tilde in llvm::sys::path::native
Windows does not treat `~` as a reference to home directory, so the call to `llvm::sys::path::native` on, say, `~/somedir` produces `~\somedir`, which has different meaning than the original path. With this change tilde is expanded on Windows to user profile directory. Such behavior keeps original meaning of the path and is consistent with the algorithm of `llvm::sys::path::home_directory`. Differential Revision: https://reviews.llvm.org/D27527 llvm-svn: 296590
Diffstat (limited to 'llvm/lib/Support/Path.cpp')
-rw-r--r--llvm/lib/Support/Path.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Support/Path.cpp b/llvm/lib/Support/Path.cpp
index 4bb035eeccc..0709ec272f5 100644
--- a/llvm/lib/Support/Path.cpp
+++ b/llvm/lib/Support/Path.cpp
@@ -556,8 +556,16 @@ void native(const Twine &path, SmallVectorImpl<char> &result) {
}
void native(SmallVectorImpl<char> &Path) {
+ if (Path.empty())
+ return;
#ifdef LLVM_ON_WIN32
std::replace(Path.begin(), Path.end(), '/', '\\');
+ if (Path[0] == '~' && (Path.size() == 1 || is_separator(Path[1]))) {
+ SmallString<128> PathHome;
+ home_directory(PathHome);
+ PathHome.append(Path.begin() + 1, Path.end());
+ Path = PathHome;
+ }
#else
for (auto PI = Path.begin(), PE = Path.end(); PI < PE; ++PI) {
if (*PI == '\\') {
OpenPOWER on IntegriCloud