Chromium Code Reviews| Index: runtime/bin/process.cc |
| diff --git a/runtime/bin/process.cc b/runtime/bin/process.cc |
| index b58304952cd4193e4ffcb88bbc0b5bd19a35c419..1269760108a8c6dad5245172a09c8cda821e6bf9 100644 |
| --- a/runtime/bin/process.cc |
| +++ b/runtime/bin/process.cc |
| @@ -47,11 +47,12 @@ static char** ExtractCStringList(Dart_Handle strings, |
| return NULL; |
| } |
| *length = len; |
| - char** string_args = new char*[len]; |
| + char** string_args; |
| + string_args = reinterpret_cast<char**>( |
| + Dart_ScopeAllocate(len * sizeof(*string_args))); |
| for (int i = 0; i < len; i++) { |
| Dart_Handle arg = Dart_ListGetAt(strings, i); |
| if (Dart_IsError(arg)) { |
| - delete[] string_args; |
| Dart_PropagateError(arg); |
| } |
| if (!Dart_IsString(arg)) { |
| @@ -64,7 +65,6 @@ static char** ExtractCStringList(Dart_Handle strings, |
| if (Dart_IsError(result)) { |
| Dart_PropagateError(result); |
|
zra
2016/03/11 23:55:51
ditto
|
| } |
| - delete[] string_args; |
| return NULL; |
| } |
| string_args[i] = const_cast<char *>(DartUtils::GetStringValue(arg)); |
| @@ -115,7 +115,6 @@ void FUNCTION_NAME(Process_Start)(Dart_NativeArguments args) { |
| if (Dart_IsString(working_directory_handle)) { |
| working_directory = DartUtils::GetStringValue(working_directory_handle); |
| } else if (!Dart_IsNull(working_directory_handle)) { |
| - delete[] string_args; |
| result = DartUtils::SetIntegerField(status_handle, "_errorCode", 0); |
| if (Dart_IsError(result)) { |
| Dart_PropagateError(result); |
| @@ -139,7 +138,6 @@ void FUNCTION_NAME(Process_Start)(Dart_NativeArguments args) { |
| "Environment values must be builtin strings", |
| &environment_length); |
| if (string_environment == NULL) { |
| - delete[] string_args; |
| Dart_SetReturnValue(args, Dart_NewBoolean(false)); |
| return; |
| } |
| @@ -151,7 +149,7 @@ void FUNCTION_NAME(Process_Start)(Dart_NativeArguments args) { |
| Dart_Handle stderr_handle = Dart_GetNativeArgument(args, 8); |
| Dart_Handle exit_handle = Dart_GetNativeArgument(args, 9); |
| intptr_t pid = -1; |
| - char* os_error_message = NULL; |
| + char* os_error_message = NULL; // Scope allocated by Process::Start. |
| int error_code = Process::Start(path, |
| string_args, |
| @@ -188,15 +186,9 @@ void FUNCTION_NAME(Process_Start)(Dart_NativeArguments args) { |
| os_error_message != NULL ? os_error_message |
| : "Cannot get error message"); |
| if (Dart_IsError(result)) { |
| - delete[] string_args; |
| - delete[] string_environment; |
| - free(os_error_message); |
| Dart_PropagateError(result); |
| } |
| } |
| - delete[] string_args; |
| - delete[] string_environment; |
| - free(os_error_message); |
| Dart_SetReturnValue(args, Dart_NewBoolean(error_code == 0)); |
| } |
| @@ -323,25 +315,24 @@ void FUNCTION_NAME(SystemEncodingToString)(Dart_NativeArguments args) { |
| Dart_Handle bytes = Dart_GetNativeArgument(args, 0); |
| intptr_t bytes_length = 0; |
| Dart_Handle result = Dart_ListLength(bytes, &bytes_length); |
| - if (Dart_IsError(result)) Dart_PropagateError(result); |
| - uint8_t* buffer = |
| - reinterpret_cast<uint8_t*>(Dart_ScopeAllocate(bytes_length + 1)); |
| + if (Dart_IsError(result)) { |
| + Dart_PropagateError(result); |
| + } |
| + uint8_t* buffer = Dart_ScopeAllocate(bytes_length + 1); |
| result = Dart_ListGetAsBytes(bytes, 0, buffer, bytes_length); |
| buffer[bytes_length] = '\0'; |
| - if (Dart_IsError(result)) Dart_PropagateError(result); |
| + if (Dart_IsError(result)) { |
| + Dart_PropagateError(result); |
| + } |
| intptr_t len; |
| - char* str = |
| - StringUtils::ConsoleStringToUtf8( |
| - reinterpret_cast<char*>(buffer), |
| - bytes_length, |
| - &len); |
| + char* str = StringUtils::ConsoleStringToUtf8( |
| + reinterpret_cast<char*>(buffer), bytes_length, &len); |
| if (str == NULL) { |
| Dart_ThrowException( |
| DartUtils::NewInternalError("SystemEncodingToString failed")); |
| } |
| result = |
| Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(str), len); |
| - free(str); |
| Dart_SetReturnValue(args, result); |
| } |
| @@ -368,7 +359,6 @@ void FUNCTION_NAME(StringToSystemEncoding)(Dart_NativeArguments args) { |
| memmove(buffer, system_string, system_len); |
| } |
| Dart_SetReturnValue(args, external_array); |
| - free(const_cast<char*>(system_string)); |
| } |
| } // namespace bin |