| 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;
 | 
| 
 |