mirror of
https://github.com/DarkStore-3DS/Project_CTR.git
synced 2026-07-04 08:49:03 +00:00
40 lines
1.1 KiB
C++
40 lines
1.1 KiB
C++
#include <tc/os/Environment.h>
|
|
#include <tc/string.h>
|
|
|
|
bool tc::os::getEnvVar(const std::string& name, std::string& value)
|
|
{
|
|
bool did_find_variable = false;
|
|
#ifdef _WIN32
|
|
// convert utf-8 to utf-16 for wide char functions
|
|
std::u16string utf16_name;
|
|
tc::string::TranscodeUtil::UTF8ToUTF16(name, utf16_name);
|
|
|
|
// get size of environment variable
|
|
size_t required_size = 0;
|
|
_wgetenv_s(&required_size, nullptr, 0, (wchar_t*)utf16_name.c_str());
|
|
|
|
// set output if variable was found
|
|
if (required_size != 0)
|
|
{
|
|
// get environment variable
|
|
std::shared_ptr<wchar_t> utf16_value(new wchar_t[required_size]);
|
|
_wgetenv_s(&required_size, utf16_value.get(), required_size, (wchar_t*)utf16_name.c_str());
|
|
|
|
// transcode back to utf-8
|
|
tc::string::TranscodeUtil::UTF16ToUTF8((char16_t*)utf16_value.get(), value);
|
|
|
|
did_find_variable = true;
|
|
}
|
|
#else
|
|
// get ptr to env variable
|
|
char* env_ptr = getenv(name.c_str());
|
|
|
|
// set output if variable was found
|
|
if (env_ptr != nullptr)
|
|
{
|
|
value = std::string(env_ptr);
|
|
did_find_variable = true;
|
|
}
|
|
#endif
|
|
return did_find_variable;
|
|
} |