diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Support/Windows/Process.inc | 5 | ||||
-rw-r--r-- | llvm/unittests/Support/ProcessTest.cpp | 10 |
2 files changed, 12 insertions, 3 deletions
diff --git a/llvm/lib/Support/Windows/Process.inc b/llvm/lib/Support/Windows/Process.inc index 18aef610d54..3fe9f89f1ef 100644 --- a/llvm/lib/Support/Windows/Process.inc +++ b/llvm/lib/Support/Windows/Process.inc @@ -129,9 +129,10 @@ Optional<std::string> Process::GetEnv(StringRef Name) { size_t Size = MAX_PATH; do { Buf.reserve(Size); + SetLastError(NO_ERROR); Size = - GetEnvironmentVariableW(NameUTF16.data(), Buf.data(), Buf.capacity()); - if (Size == 0) + GetEnvironmentVariableW(NameUTF16.data(), Buf.data(), Buf.capacity()); + if (Size == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND) return None; // Try again with larger buffer. diff --git a/llvm/unittests/Support/ProcessTest.cpp b/llvm/unittests/Support/ProcessTest.cpp index 298a0a37323..37587bf4799 100644 --- a/llvm/unittests/Support/ProcessTest.cpp +++ b/llvm/unittests/Support/ProcessTest.cpp @@ -42,10 +42,18 @@ TEST(ProcessTest, None) { Optional<std::string> val( Process::GetEnv("__LLVM_TEST_ENVIRON_NO_SUCH_VAR__")); EXPECT_FALSE(val.hasValue()); -} +} #endif #ifdef LLVM_ON_WIN32 + +TEST(ProcessTest, EmptyVal) { + SetEnvironmentVariableA("__LLVM_TEST_ENVIRON_VAR__", ""); + Optional<std::string> val(Process::GetEnv("__LLVM_TEST_ENVIRON_VAR__")); + EXPECT_TRUE(val.hasValue()); + EXPECT_STREQ("", val->c_str()); +} + TEST(ProcessTest, Wchar) { SetEnvironmentVariableW(L"__LLVM_TEST_ENVIRON_VAR__", L"abcdefghijklmnopqrs"); Optional<std::string> val(Process::GetEnv("__LLVM_TEST_ENVIRON_VAR__")); |