| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include <process.h> | 5 #include <process.h> |
| 6 | 6 |
| 7 #include "bin/builtin.h" | 7 #include "bin/builtin.h" |
| 8 #include "bin/globals.h" | 8 #include "bin/globals.h" |
| 9 #include "bin/process.h" | 9 #include "bin/process.h" |
| 10 #include "bin/eventhandler.h" | 10 #include "bin/eventhandler.h" |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 HANDLE handles2[2], | 173 HANDLE handles2[2], |
| 174 HANDLE handles3[2], | 174 HANDLE handles3[2], |
| 175 HANDLE handles4[2]) { | 175 HANDLE handles4[2]) { |
| 176 CloseProcessPipe(handles1); | 176 CloseProcessPipe(handles1); |
| 177 CloseProcessPipe(handles2); | 177 CloseProcessPipe(handles2); |
| 178 CloseProcessPipe(handles3); | 178 CloseProcessPipe(handles3); |
| 179 CloseProcessPipe(handles4); | 179 CloseProcessPipe(handles4); |
| 180 } | 180 } |
| 181 | 181 |
| 182 static int SetOsErrorMessage(char* os_error_message, | 182 static int SetOsErrorMessage(char* os_error_message, |
| 183 int os_error_message_len) { | 183 int os_error_message_len) { |
| 184 int error_code = GetLastError(); | 184 int error_code = GetLastError(); |
| 185 // TODO(sgjesse): Use FormatMessage to get the error message. | 185 DWORD message_size = |
| 186 char message[80]; | 186 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, |
| 187 snprintf(os_error_message, os_error_message_len, "OS Error %d", error_code); | 187 NULL, |
| 188 error_code, |
| 189 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), |
| 190 os_error_message, |
| 191 os_error_message_len, |
| 192 NULL); |
| 193 if (message_size == 0) { |
| 194 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { |
| 195 fprintf(stderr, "FormatMessage failed %d\n", GetLastError()); |
| 196 } |
| 197 snprintf(os_error_message, os_error_message_len, "OS Error %d", error_code); |
| 198 } |
| 199 os_error_message[os_error_message_len - 1] = '\0'; |
| 188 return error_code; | 200 return error_code; |
| 189 } | 201 } |
| 190 | 202 |
| 191 | 203 |
| 192 static unsigned int __stdcall TerminationWaitThread(void* args) { | 204 static unsigned int __stdcall TerminationWaitThread(void* args) { |
| 193 ProcessInfo* process = reinterpret_cast<ProcessInfo*>(args); | 205 ProcessInfo* process = reinterpret_cast<ProcessInfo*>(args); |
| 194 WaitForSingleObject(process->process_handle(), INFINITE); | 206 WaitForSingleObject(process->process_handle(), INFINITE); |
| 195 DWORD exit_code; | 207 DWORD exit_code; |
| 196 BOOL ok = GetExitCodeProcess(process->process_handle(), &exit_code); | 208 BOOL ok = GetExitCodeProcess(process->process_handle(), &exit_code); |
| 197 if (!ok) { | 209 if (!ok) { |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 return false; | 399 return false; |
| 388 } | 400 } |
| 389 } | 401 } |
| 390 return true; | 402 return true; |
| 391 } | 403 } |
| 392 | 404 |
| 393 | 405 |
| 394 void Process::Exit(intptr_t id) { | 406 void Process::Exit(intptr_t id) { |
| 395 RemoveProcess(id); | 407 RemoveProcess(id); |
| 396 } | 408 } |
| OLD | NEW |