diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2017-03-10 16:54:08 -0800 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2017-03-10 17:04:29 -0800 |
| commit | 5f39474a17aefc754dcba7d07b2c6ec8a03fc07c (patch) | |
| tree | 66b9e24232d548e84384a66da435050e443b44aa /toolsrc/src | |
| parent | b364239d0711a9749a61f16f2b101801e863b5c2 (diff) | |
| download | vcpkg-5f39474a17aefc754dcba7d07b2c6ec8a03fc07c.tar.gz vcpkg-5f39474a17aefc754dcba7d07b2c6ec8a03fc07c.zip | |
Rework System::get_environmental_variable()
Diffstat (limited to 'toolsrc/src')
| -rw-r--r-- | toolsrc/src/vcpkg_System.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/toolsrc/src/vcpkg_System.cpp b/toolsrc/src/vcpkg_System.cpp index 1730ff3ad..b333f36b0 100644 --- a/toolsrc/src/vcpkg_System.cpp +++ b/toolsrc/src/vcpkg_System.cpp @@ -1,5 +1,6 @@ #include "pch.h" #include "vcpkg_System.h" +#include "vcpkg_Checks.h" namespace vcpkg::System { @@ -92,15 +93,16 @@ namespace vcpkg::System optional<std::wstring> get_environmental_variable(const wchar_t* varname) noexcept { - wchar_t* buffer; - _wdupenv_s(&buffer, nullptr, varname); - - if (buffer == nullptr) - { + auto sz = GetEnvironmentVariableW(varname, nullptr, 0); + if (sz == 0) return nullptr; - } - std::unique_ptr<wchar_t, void(__cdecl *)(void*)> bufptr(buffer, free); - return std::make_unique<std::wstring>(buffer); + + auto ret = std::make_unique<std::wstring>(sz, L'\0'); + Checks::check_exit(MAXDWORD >= ret->size()); + auto sz2 = GetEnvironmentVariableW(varname, ret->data(), static_cast<DWORD>(ret->size())); + Checks::check_exit(sz2 + 1 == sz); + ret->pop_back(); + return ret; } void set_environmental_variable(const wchar_t* varname, const wchar_t* varvalue) noexcept |
