OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 "platform/globals.h" | 5 #include "platform/globals.h" |
6 #if defined(TARGET_OS_WINDOWS) | 6 #if defined(TARGET_OS_WINDOWS) |
7 | 7 |
8 #include <process.h> // NOLINT | 8 #include <process.h> // NOLINT |
9 | 9 |
10 #include "bin/builtin.h" | 10 #include "bin/builtin.h" |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 CloseProcessPipe(handles3); | 302 CloseProcessPipe(handles3); |
303 CloseProcessPipe(handles4); | 303 CloseProcessPipe(handles4); |
304 } | 304 } |
305 | 305 |
306 | 306 |
307 static int SetOsErrorMessage(char** os_error_message) { | 307 static int SetOsErrorMessage(char** os_error_message) { |
308 int error_code = GetLastError(); | 308 int error_code = GetLastError(); |
309 const int kMaxMessageLength = 256; | 309 const int kMaxMessageLength = 256; |
310 wchar_t message[kMaxMessageLength]; | 310 wchar_t message[kMaxMessageLength]; |
311 FormatMessageIntoBuffer(error_code, message, kMaxMessageLength); | 311 FormatMessageIntoBuffer(error_code, message, kMaxMessageLength); |
312 *os_error_message = StringUtils::WideToUtf8(message); | 312 *os_error_message = StringUtilsWin::WideToUtf8(message); |
313 return error_code; | 313 return error_code; |
314 } | 314 } |
315 | 315 |
316 | 316 |
317 // Open an inheritable handle to NUL. | 317 // Open an inheritable handle to NUL. |
318 static HANDLE OpenNul() { | 318 static HANDLE OpenNul() { |
319 SECURITY_ATTRIBUTES inherit_handle; | 319 SECURITY_ATTRIBUTES inherit_handle; |
320 inherit_handle.nLength = sizeof(SECURITY_ATTRIBUTES); | 320 inherit_handle.nLength = sizeof(SECURITY_ATTRIBUTES); |
321 inherit_handle.bInheritHandle = TRUE; | 321 inherit_handle.bInheritHandle = TRUE; |
322 inherit_handle.lpSecurityDescriptor = NULL; | 322 inherit_handle.lpSecurityDescriptor = NULL; |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 stdin_handles_[kReadHandle] = INVALID_HANDLE_VALUE; | 426 stdin_handles_[kReadHandle] = INVALID_HANDLE_VALUE; |
427 stdin_handles_[kWriteHandle] = INVALID_HANDLE_VALUE; | 427 stdin_handles_[kWriteHandle] = INVALID_HANDLE_VALUE; |
428 stdout_handles_[kReadHandle] = INVALID_HANDLE_VALUE; | 428 stdout_handles_[kReadHandle] = INVALID_HANDLE_VALUE; |
429 stdout_handles_[kWriteHandle] = INVALID_HANDLE_VALUE; | 429 stdout_handles_[kWriteHandle] = INVALID_HANDLE_VALUE; |
430 stderr_handles_[kReadHandle] = INVALID_HANDLE_VALUE; | 430 stderr_handles_[kReadHandle] = INVALID_HANDLE_VALUE; |
431 stderr_handles_[kWriteHandle] = INVALID_HANDLE_VALUE; | 431 stderr_handles_[kWriteHandle] = INVALID_HANDLE_VALUE; |
432 exit_handles_[kReadHandle] = INVALID_HANDLE_VALUE; | 432 exit_handles_[kReadHandle] = INVALID_HANDLE_VALUE; |
433 exit_handles_[kWriteHandle] = INVALID_HANDLE_VALUE; | 433 exit_handles_[kWriteHandle] = INVALID_HANDLE_VALUE; |
434 | 434 |
435 // Transform input strings to system format. | 435 // Transform input strings to system format. |
436 const wchar_t* system_path = StringUtils::Utf8ToWide(path_); | 436 const wchar_t* system_path = StringUtilsWin::Utf8ToWide(path_); |
437 wchar_t** system_arguments = new wchar_t*[arguments_length]; | 437 wchar_t** system_arguments = new wchar_t*[arguments_length]; |
438 for (int i = 0; i < arguments_length; i++) { | 438 for (int i = 0; i < arguments_length; i++) { |
439 system_arguments[i] = StringUtils::Utf8ToWide(arguments[i]); | 439 system_arguments[i] = StringUtilsWin::Utf8ToWide(arguments[i]); |
440 } | 440 } |
441 | 441 |
442 // Compute command-line length. | 442 // Compute command-line length. |
443 int command_line_length = wcslen(system_path); | 443 int command_line_length = wcslen(system_path); |
444 for (int i = 0; i < arguments_length; i++) { | 444 for (int i = 0; i < arguments_length; i++) { |
445 command_line_length += wcslen(system_arguments[i]); | 445 command_line_length += wcslen(system_arguments[i]); |
446 } | 446 } |
447 // Account for null termination and one space per argument. | 447 // Account for null termination and one space per argument. |
448 command_line_length += arguments_length + 1; | 448 command_line_length += arguments_length + 1; |
449 | 449 |
(...skipping 17 matching lines...) Expand all Loading... |
467 free(const_cast<wchar_t*>(system_path)); | 467 free(const_cast<wchar_t*>(system_path)); |
468 for (int i = 0; i < arguments_length; i++) free(system_arguments[i]); | 468 for (int i = 0; i < arguments_length; i++) free(system_arguments[i]); |
469 delete[] system_arguments; | 469 delete[] system_arguments; |
470 | 470 |
471 // Create environment block if an environment is supplied. | 471 // Create environment block if an environment is supplied. |
472 environment_block_ = NULL; | 472 environment_block_ = NULL; |
473 if (environment != NULL) { | 473 if (environment != NULL) { |
474 wchar_t** system_environment = new wchar_t*[environment_length]; | 474 wchar_t** system_environment = new wchar_t*[environment_length]; |
475 // Convert environment strings to system strings. | 475 // Convert environment strings to system strings. |
476 for (intptr_t i = 0; i < environment_length; i++) { | 476 for (intptr_t i = 0; i < environment_length; i++) { |
477 system_environment[i] = StringUtils::Utf8ToWide(environment[i]); | 477 system_environment[i] = StringUtilsWin::Utf8ToWide(environment[i]); |
478 } | 478 } |
479 | 479 |
480 // An environment block is a sequence of zero-terminated strings | 480 // An environment block is a sequence of zero-terminated strings |
481 // followed by a block-terminating zero char. | 481 // followed by a block-terminating zero char. |
482 intptr_t block_size = 1; | 482 intptr_t block_size = 1; |
483 for (intptr_t i = 0; i < environment_length; i++) { | 483 for (intptr_t i = 0; i < environment_length; i++) { |
484 block_size += wcslen(system_environment[i]) + 1; | 484 block_size += wcslen(system_environment[i]) + 1; |
485 } | 485 } |
486 environment_block_ = new wchar_t[block_size]; | 486 environment_block_ = new wchar_t[block_size]; |
487 intptr_t block_index = 0; | 487 intptr_t block_index = 0; |
(...skipping 11 matching lines...) Expand all Loading... |
499 environment_block_[block_index++] = '\0'; | 499 environment_block_[block_index++] = '\0'; |
500 ASSERT(block_index == block_size); | 500 ASSERT(block_index == block_size); |
501 for (intptr_t i = 0; i < environment_length; i++) { | 501 for (intptr_t i = 0; i < environment_length; i++) { |
502 free(system_environment[i]); | 502 free(system_environment[i]); |
503 } | 503 } |
504 delete[] system_environment; | 504 delete[] system_environment; |
505 } | 505 } |
506 | 506 |
507 system_working_directory_ = NULL; | 507 system_working_directory_ = NULL; |
508 if (working_directory_ != NULL) { | 508 if (working_directory_ != NULL) { |
509 system_working_directory_ = StringUtils::Utf8ToWide(working_directory_); | 509 system_working_directory_ = |
| 510 StringUtilsWin::Utf8ToWide(working_directory_); |
510 } | 511 } |
511 | 512 |
512 attribute_list_ = NULL; | 513 attribute_list_ = NULL; |
513 } | 514 } |
514 | 515 |
515 | 516 |
516 ~ProcessStarter() { | 517 ~ProcessStarter() { |
517 // Deallocate command-line and environment block strings. | 518 // Deallocate command-line and environment block strings. |
518 delete[] command_line_; | 519 delete[] command_line_; |
519 delete[] environment_block_; | 520 delete[] environment_block_; |
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1042 USE(SetConsoleCtrlHandler(SignalHandler, false)); | 1043 USE(SetConsoleCtrlHandler(SignalHandler, false)); |
1043 } | 1044 } |
1044 } | 1045 } |
1045 delete handler; | 1046 delete handler; |
1046 } | 1047 } |
1047 | 1048 |
1048 } // namespace bin | 1049 } // namespace bin |
1049 } // namespace dart | 1050 } // namespace dart |
1050 | 1051 |
1051 #endif // defined(TARGET_OS_WINDOWS) | 1052 #endif // defined(TARGET_OS_WINDOWS) |
OLD | NEW |