| Index: runtime/bin/platform_win.cc
|
| diff --git a/runtime/bin/platform_win.cc b/runtime/bin/platform_win.cc
|
| index 9b29cb726f51d06c72d96c90befd5e58dec16c6a..9bc01bc48621d3e7d1ee501ea5ebd623337c3f4a 100644
|
| --- a/runtime/bin/platform_win.cc
|
| +++ b/runtime/bin/platform_win.cc
|
| @@ -47,7 +47,9 @@ bool Platform::LocalHostname(char *buffer, intptr_t buffer_length) {
|
| #if defined(PLATFORM_DISABLE_SOCKET)
|
| return false;
|
| #else
|
| - if (!Socket::Initialize()) return false;
|
| + if (!Socket::Initialize()) {
|
| + return false;
|
| + }
|
| return gethostname(buffer, buffer_length) == 0;
|
| #endif
|
| }
|
| @@ -55,7 +57,9 @@ bool Platform::LocalHostname(char *buffer, intptr_t buffer_length) {
|
|
|
| char** Platform::Environment(intptr_t* count) {
|
| wchar_t* strings = GetEnvironmentStringsW();
|
| - if (strings == NULL) return NULL;
|
| + if (strings == NULL) {
|
| + return NULL;
|
| + }
|
| wchar_t* tmp = strings;
|
| intptr_t i = 0;
|
| while (*tmp != '\0') {
|
| @@ -63,15 +67,20 @@ char** Platform::Environment(intptr_t* count) {
|
| // These are synthetic variables corresponding to dynamic environment
|
| // variables like %=C:% and %=ExitCode%, and the Dart environment does
|
| // not include these.
|
| - if (*tmp != '=') i++;
|
| + if (*tmp != '=') {
|
| + i++;
|
| + }
|
| tmp += (wcslen(tmp) + 1);
|
| }
|
| *count = i;
|
| - char** result = new char*[i];
|
| + char** result;
|
| + result = reinterpret_cast<char**>(Dart_ScopeAllocate(i * sizeof(*result)));
|
| tmp = strings;
|
| for (intptr_t current = 0; current < i;) {
|
| // Skip the strings that were not counted above.
|
| - if (*tmp != '=') result[current++] = StringUtilsWin::WideToUtf8(tmp);
|
| + if (*tmp != '=') {
|
| + result[current++] = StringUtilsWin::WideToUtf8(tmp);
|
| + }
|
| tmp += (wcslen(tmp) + 1);
|
| }
|
| FreeEnvironmentStringsW(strings);
|
| @@ -79,36 +88,27 @@ char** Platform::Environment(intptr_t* count) {
|
| }
|
|
|
|
|
| -void Platform::FreeEnvironment(char** env, intptr_t count) {
|
| - for (intptr_t i = 0; i < count; i++) {
|
| - free(env[i]);
|
| - }
|
| - delete[] env;
|
| -}
|
| -
|
| -
|
| -char* Platform::ResolveExecutablePath() {
|
| +const char* Platform::ResolveExecutablePath() {
|
| // GetModuleFileNameW cannot directly provide information on the
|
| // required buffer size, so start out with a buffer large enough to
|
| // hold any Windows path.
|
| const int kTmpBufferSize = 32768;
|
| - wchar_t* tmp_buffer = reinterpret_cast<wchar_t*>(malloc(kTmpBufferSize));
|
| + wchar_t* tmp_buffer =
|
| + reinterpret_cast<wchar_t*>(Dart_ScopeAllocate(kTmpBufferSize));
|
| // Ensure no last error before calling GetModuleFileNameW.
|
| SetLastError(ERROR_SUCCESS);
|
| // Get the required length of the buffer.
|
| int path_length = GetModuleFileNameW(NULL, tmp_buffer, kTmpBufferSize);
|
| if (GetLastError() != ERROR_SUCCESS) {
|
| - free(tmp_buffer);
|
| return NULL;
|
| }
|
| char* path = StringUtilsWin::WideToUtf8(tmp_buffer);
|
| - free(tmp_buffer);
|
| // Return the canonical path as the returned path might contain symlinks.
|
| - char* canon_path = File::GetCanonicalPath(path);
|
| - free(path);
|
| + const char* canon_path = File::GetCanonicalPath(path);
|
| return canon_path;
|
| }
|
|
|
| +
|
| void Platform::Exit(int exit_code) {
|
| // TODO(zra): Remove once VM shuts down cleanly.
|
| ::dart::private_flag_windows_run_tls_destructors = false;
|
|
|