Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(265)

Unified Diff: runtime/bin/process_win.cc

Issue 11275281: Update dart:io to convert strings between UTF8 and current code page (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/platform_win.cc ('k') | runtime/bin/utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/process_win.cc
diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
index 5628a53998d36f624c6cffed0f21fde75e2cd0e0..3094176a6e0743718f150d61c77a572344939380 100644
--- a/runtime/bin/process_win.cc
+++ b/runtime/bin/process_win.cc
@@ -8,6 +8,7 @@
#include "bin/process.h"
#include "bin/eventhandler.h"
#include "bin/thread.h"
+#include "bin/utils.h"
#include "platform/globals.h"
static const int kReadHandle = 0;
@@ -398,6 +399,12 @@ int Process::Start(const char* path,
PROCESS_INFORMATION process_info;
ZeroMemory(&process_info, sizeof(process_info));
+ // Transform input strings to system format.
+ path = StringUtils::Utf8ToSystemString(path);
+ for (int i = 0; i < arguments_length; i++) {
+ arguments[i] = StringUtils::Utf8ToSystemString(arguments[i]);
+ }
+
// Compute command-line length.
int command_line_length = strlen(path);
for (int i = 0; i < arguments_length; i++) {
@@ -410,6 +417,8 @@ int Process::Start(const char* path,
int error_code = SetOsErrorMessage(os_error_message, os_error_message_len);
CloseProcessPipes(
stdin_handles, stdout_handles, stderr_handles, exit_handles);
+ free(const_cast<char*>(path));
+ for (int i = 0; i < arguments_length; i++) free(arguments[i]);
return error_code;
}
@@ -427,10 +436,17 @@ int Process::Start(const char* path,
remaining -= written;
ASSERT(remaining >= 0);
}
+ free(const_cast<char*>(path));
+ for (int i = 0; i < arguments_length; i++) free(arguments[i]);
// Create environment block if an environment is supplied.
char* environment_block = NULL;
if (environment != NULL) {
+ // Convert environment strings to system strings.
+ for (intptr_t i = 0; i < environment_length; i++) {
+ environment[i] = StringUtils::Utf8ToSystemString(environment[i]);
+ }
+
// An environment block is a sequence of zero-terminated strings
// followed by a block-terminating zero char.
intptr_t block_size = 1;
@@ -452,6 +468,11 @@ int Process::Start(const char* path,
// Block-terminating zero char.
environment_block[block_index++] = '\0';
ASSERT(block_index == block_size);
+ for (intptr_t i = 0; i < environment_length; i++) free(environment[i]);
+ }
+
+ if (working_directory != NULL) {
+ working_directory = StringUtils::Utf8ToSystemString(working_directory);
}
// Create process.
@@ -469,6 +490,9 @@ int Process::Start(const char* path,
// Deallocate command-line and environment block strings.
delete[] command_line;
delete[] environment_block;
+ if (working_directory != NULL) {
+ free(const_cast<char*>(working_directory));
+ }
if (result == 0) {
int error_code = SetOsErrorMessage(os_error_message, os_error_message_len);
« no previous file with comments | « runtime/bin/platform_win.cc ('k') | runtime/bin/utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698