diff options
| author | Dan Engelbrecht <[email protected]> | 2023-06-13 07:23:08 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-06-13 07:23:08 +0200 |
| commit | 6abbe430fe26146e8faeeee0573843cc79dddee0 (patch) | |
| tree | 648ae77fc6bb87eaa2007e94f6db09dfe5737114 /src/zencore/filesystem.cpp | |
| parent | v0.2.13-pre2 (diff) | |
| download | zen-6abbe430fe26146e8faeeee0573843cc79dddee0.tar.xz zen-6abbe430fe26146e8faeeee0573843cc79dddee0.zip | |
Make sure GetEnvVariable can handle values that are longer than 1023 characters (#332)
Diffstat (limited to 'src/zencore/filesystem.cpp')
| -rw-r--r-- | src/zencore/filesystem.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/zencore/filesystem.cpp b/src/zencore/filesystem.cpp index 9d55331eb..cde4c52ab 100644 --- a/src/zencore/filesystem.cpp +++ b/src/zencore/filesystem.cpp @@ -1144,11 +1144,25 @@ GetEnvVariable(std::string_view VariableName) ZEN_ASSERT(!VariableName.empty()); #if ZEN_PLATFORM_WINDOWS - CHAR EnvVariableBuffer[1023 + 1]; - DWORD RESULT = GetEnvironmentVariableA(std::string(VariableName).c_str(), EnvVariableBuffer, sizeof(EnvVariableBuffer)); - if (RESULT > 0 && RESULT < sizeof(EnvVariableBuffer)) + std::vector<CHAR> EnvVariableBuffer(1023 + 1); + DWORD RESULT = GetEnvironmentVariableA(std::string(VariableName).c_str(), EnvVariableBuffer.data(), (DWORD)EnvVariableBuffer.size()); + if (RESULT == 0) { - return std::string(EnvVariableBuffer); + return ""; + } + if (RESULT <= EnvVariableBuffer.size()) + { + return std::string(EnvVariableBuffer.data(), size_t(RESULT)); + } + EnvVariableBuffer.resize(size_t(RESULT)); + RESULT = GetEnvironmentVariableA(std::string(VariableName).c_str(), EnvVariableBuffer.data(), (DWORD)EnvVariableBuffer.size()); + if (RESULT == 0) + { + return ""; + } + if (RESULT <= EnvVariableBuffer.size()) + { + return std::string(EnvVariableBuffer.data(), size_t(RESULT)); } #endif #if ZEN_PLATFORM_LINUX || ZEN_PLATFORM_MAC |