|
7 | 7 | #include <aws/core/platform/Environment.h>
|
8 | 8 | #include <aws/core/utils/logging/LogMacros.h>
|
9 | 9 | #include <aws/core/utils/StringUtils.h>
|
| 10 | +#include <aws/core/utils/memory/stl/AWSVector.h> |
10 | 11 | #include <cassert>
|
11 | 12 | #include <iostream>
|
12 | 13 | #include <Userenv.h>
|
@@ -180,14 +181,20 @@ Aws::String GetHomeDirectory()
|
180 | 181 |
|
181 | 182 | Aws::String GetExecutableDirectory()
|
182 | 183 | {
|
183 |
| - static const unsigned long long bufferSize = 256; |
184 |
| - WCHAR buffer[bufferSize]; |
| 184 | + Aws::Vector<wchar_t> buffer(MAX_PATH + 1, NULL); |
| 185 | + DWORD written = GetModuleFileNameW(nullptr, buffer.data(), static_cast<DWORD>(buffer.size())); |
185 | 186 |
|
186 |
| - memset(buffer, 0, sizeof(buffer)); |
| 187 | + if (ERROR_INSUFFICIENT_BUFFER == GetLastError()) |
| 188 | + { |
| 189 | + /* Max unicode path size is 2^15 + 1 additional byte for null terminator. */ |
| 190 | + const DWORD unicode_max_path = 0x8000 + 1; |
| 191 | + buffer.resize(unicode_max_path, NULL); |
| 192 | + written = GetModuleFileNameW(nullptr, buffer.data(), static_cast<DWORD>(buffer.size())); |
| 193 | + } |
187 | 194 |
|
188 |
| - if (GetModuleFileNameW(nullptr, buffer, static_cast<DWORD>(sizeof(buffer)))) |
| 195 | + if (written > 0) |
189 | 196 | {
|
190 |
| - Aws::String bufferStr(Aws::Utils::StringUtils::FromWString(buffer)); |
| 197 | + Aws::String bufferStr(Aws::Utils::StringUtils::FromWString(buffer.data())); |
191 | 198 | auto fileNameStart = bufferStr.find_last_of(PATH_DELIM);
|
192 | 199 | if (fileNameStart != std::string::npos)
|
193 | 200 | {
|
|
0 commit comments