summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorPawel Bylica <chfast@gmail.com>2015-11-06 23:44:23 +0000
committerPawel Bylica <chfast@gmail.com>2015-11-06 23:44:23 +0000
commit6e680b2be7e2af65fa054a61133f4930844975a4 (patch)
tree635c3c1cb2aa86ef79839afe0a25c13ad1492835 /llvm/lib
parentb43221439c6e57c90dd231cba0c12ace0aee73c7 (diff)
downloadbcm5719-llvm-6e680b2be7e2af65fa054a61133f4930844975a4.tar.gz
bcm5719-llvm-6e680b2be7e2af65fa054a61133f4930844975a4.zip
Revert r252366: [Support] Use GetTempDir to get the temporary dir path on Windows.
llvm-svn: 252367
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Support/Windows/Path.inc47
1 files changed, 37 insertions, 10 deletions
diff --git a/llvm/lib/Support/Windows/Path.inc b/llvm/lib/Support/Windows/Path.inc
index c787dc2a3f8..49910af55a7 100644
--- a/llvm/lib/Support/Windows/Path.inc
+++ b/llvm/lib/Support/Windows/Path.inc
@@ -773,22 +773,49 @@ bool home_directory(SmallVectorImpl<char> &result) {
return getKnownFolderPath(FOLDERID_Profile, result);
}
+static bool getTempDirEnvVar(const char *Var, SmallVectorImpl<char> &Res) {
+ SmallVector<wchar_t, 128> NameUTF16;
+ if (windows::UTF8ToUTF16(Var, NameUTF16))
+ return false;
+
+ SmallVector<wchar_t, 1024> Buf;
+ size_t Size = 1024;
+ do {
+ Buf.reserve(Size);
+ Size =
+ GetEnvironmentVariableW(NameUTF16.data(), Buf.data(), Buf.capacity());
+ if (Size == 0)
+ return false;
+
+ // Try again with larger buffer.
+ } while (Size > Buf.capacity());
+ Buf.set_size(Size);
+
+ if (windows::UTF16ToUTF8(Buf.data(), Size, Res))
+ return false;
+ return true;
+}
+
+static bool getTempDirEnvVar(SmallVectorImpl<char> &Res) {
+ const char *EnvironmentVariables[] = {"TMP", "TEMP", "USERPROFILE"};
+ for (const char *Env : EnvironmentVariables) {
+ if (getTempDirEnvVar(Env, Res))
+ return true;
+ }
+ return false;
+}
+
void system_temp_directory(bool ErasedOnReboot, SmallVectorImpl<char> &Result) {
(void)ErasedOnReboot;
+ Result.clear();
- wchar_t Path[MAX_PATH + 2]; // GetTempPath can return MAX_PATH + 1 + null
- if (auto PathLength = ::GetTempPathW(sizeof(Path) / sizeof(wchar_t), Path)) {
- assert(PathLength > 0 && PathLength <= (MAX_PATH + 1) &&
- "GetTempPath returned undocumented result");
- if (Path[PathLength - 1] == L'\\')
- --PathLength; // skip trailing "\" added by GetTempPath
- if (!UTF16ToUTF8(Path, PathLength, Result))
- return;
- }
+ // Check whether the temporary directory is specified by an environment
+ // variable.
+ if (getTempDirEnvVar(Result))
+ return;
// Fall back to a system default.
const char *DefaultResult = "C:\\TEMP";
- Result.clear();
Result.append(DefaultResult, DefaultResult + strlen(DefaultResult));
}
} // end namespace path
OpenPOWER on IntegriCloud