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

Side by Side Diff: runtime/bin/process.cc

Issue 1781883002: Fixes some memory leaks in //runtime/bin (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Cleanup Created 4 years, 9 months 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 "bin/dartutils.h" 5 #include "bin/dartutils.h"
6 #include "bin/io_buffer.h" 6 #include "bin/io_buffer.h"
7 #include "bin/log.h" 7 #include "bin/log.h"
8 #include "bin/platform.h" 8 #include "bin/platform.h"
9 #include "bin/process.h" 9 #include "bin/process.h"
10 #include "bin/socket.h" 10 #include "bin/socket.h"
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 return; 144 return;
145 } 145 }
146 } 146 }
147 int64_t mode = 147 int64_t mode =
148 DartUtils::GetInt64ValueCheckRange(Dart_GetNativeArgument(args, 5), 0, 2); 148 DartUtils::GetInt64ValueCheckRange(Dart_GetNativeArgument(args, 5), 0, 2);
149 Dart_Handle stdin_handle = Dart_GetNativeArgument(args, 6); 149 Dart_Handle stdin_handle = Dart_GetNativeArgument(args, 6);
150 Dart_Handle stdout_handle = Dart_GetNativeArgument(args, 7); 150 Dart_Handle stdout_handle = Dart_GetNativeArgument(args, 7);
151 Dart_Handle stderr_handle = Dart_GetNativeArgument(args, 8); 151 Dart_Handle stderr_handle = Dart_GetNativeArgument(args, 8);
152 Dart_Handle exit_handle = Dart_GetNativeArgument(args, 9); 152 Dart_Handle exit_handle = Dart_GetNativeArgument(args, 9);
153 intptr_t pid = -1; 153 intptr_t pid = -1;
154 char* os_error_message = NULL; 154 char* os_error_message = NULL; // Scope allocated by Process::Start.
155 155
156 int error_code = Process::Start(path, 156 int error_code = Process::Start(path,
157 string_args, 157 string_args,
158 args_length, 158 args_length,
159 working_directory, 159 working_directory,
160 string_environment, 160 string_environment,
161 environment_length, 161 environment_length,
162 static_cast<ProcessStartMode>(mode), 162 static_cast<ProcessStartMode>(mode),
163 &process_stdout, 163 &process_stdout,
164 &process_stdin, 164 &process_stdin,
(...skipping 18 matching lines...) Expand all
183 Dart_PropagateError(result); 183 Dart_PropagateError(result);
184 } 184 }
185 result = DartUtils::SetStringField( 185 result = DartUtils::SetStringField(
186 status_handle, 186 status_handle,
187 "_errorMessage", 187 "_errorMessage",
188 os_error_message != NULL ? os_error_message 188 os_error_message != NULL ? os_error_message
189 : "Cannot get error message"); 189 : "Cannot get error message");
190 if (Dart_IsError(result)) { 190 if (Dart_IsError(result)) {
191 delete[] string_args; 191 delete[] string_args;
192 delete[] string_environment; 192 delete[] string_environment;
193 free(os_error_message);
194 Dart_PropagateError(result); 193 Dart_PropagateError(result);
195 } 194 }
196 } 195 }
197 delete[] string_args; 196 delete[] string_args;
198 delete[] string_environment; 197 delete[] string_environment;
199 free(os_error_message);
200 Dart_SetReturnValue(args, Dart_NewBoolean(error_code == 0)); 198 Dart_SetReturnValue(args, Dart_NewBoolean(error_code == 0));
201 } 199 }
202 200
203 201
204 void FUNCTION_NAME(Process_Wait)(Dart_NativeArguments args) { 202 void FUNCTION_NAME(Process_Wait)(Dart_NativeArguments args) {
205 Dart_Handle process = Dart_GetNativeArgument(args, 0); 203 Dart_Handle process = Dart_GetNativeArgument(args, 0);
206 intptr_t process_stdin = 204 intptr_t process_stdin =
207 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 1)); 205 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 1));
208 intptr_t process_stdout = 206 intptr_t process_stdout =
209 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 2)); 207 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 2));
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 Dart_Handle Process::SetProcessIdNativeField(Dart_Handle process, 314 Dart_Handle Process::SetProcessIdNativeField(Dart_Handle process,
317 intptr_t pid) { 315 intptr_t pid) {
318 return Dart_SetNativeInstanceField(process, kProcessIdNativeField, pid); 316 return Dart_SetNativeInstanceField(process, kProcessIdNativeField, pid);
319 } 317 }
320 318
321 319
322 void FUNCTION_NAME(SystemEncodingToString)(Dart_NativeArguments args) { 320 void FUNCTION_NAME(SystemEncodingToString)(Dart_NativeArguments args) {
323 Dart_Handle bytes = Dart_GetNativeArgument(args, 0); 321 Dart_Handle bytes = Dart_GetNativeArgument(args, 0);
324 intptr_t bytes_length = 0; 322 intptr_t bytes_length = 0;
325 Dart_Handle result = Dart_ListLength(bytes, &bytes_length); 323 Dart_Handle result = Dart_ListLength(bytes, &bytes_length);
326 if (Dart_IsError(result)) Dart_PropagateError(result); 324 if (Dart_IsError(result)) {
327 uint8_t* buffer = 325 Dart_PropagateError(result);
328 reinterpret_cast<uint8_t*>(Dart_ScopeAllocate(bytes_length + 1)); 326 }
327 uint8_t* buffer = Dart_ScopeAllocate(bytes_length + 1);
329 result = Dart_ListGetAsBytes(bytes, 0, buffer, bytes_length); 328 result = Dart_ListGetAsBytes(bytes, 0, buffer, bytes_length);
330 buffer[bytes_length] = '\0'; 329 buffer[bytes_length] = '\0';
331 if (Dart_IsError(result)) Dart_PropagateError(result); 330 if (Dart_IsError(result)) {
331 Dart_PropagateError(result);
332 }
332 intptr_t len; 333 intptr_t len;
333 char* str = 334 char* str = StringUtils::ConsoleStringToUtf8(
334 StringUtils::ConsoleStringToUtf8( 335 reinterpret_cast<char*>(buffer), bytes_length, &len);
335 reinterpret_cast<char*>(buffer),
336 bytes_length,
337 &len);
338 if (str == NULL) { 336 if (str == NULL) {
339 Dart_ThrowException( 337 Dart_ThrowException(
340 DartUtils::NewInternalError("SystemEncodingToString failed")); 338 DartUtils::NewInternalError("SystemEncodingToString failed"));
341 } 339 }
342 result = 340 result =
343 Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(str), len); 341 Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(str), len);
344 free(str);
345 Dart_SetReturnValue(args, result); 342 Dart_SetReturnValue(args, result);
346 } 343 }
347 344
348 345
349 void FUNCTION_NAME(StringToSystemEncoding)(Dart_NativeArguments args) { 346 void FUNCTION_NAME(StringToSystemEncoding)(Dart_NativeArguments args) {
350 Dart_Handle str = Dart_GetNativeArgument(args, 0); 347 Dart_Handle str = Dart_GetNativeArgument(args, 0);
351 char* utf8; 348 char* utf8;
352 intptr_t utf8_len; 349 intptr_t utf8_len;
353 Dart_Handle result = Dart_StringToUTF8( 350 Dart_Handle result = Dart_StringToUTF8(
354 str, reinterpret_cast<uint8_t **>(&utf8), &utf8_len); 351 str, reinterpret_cast<uint8_t **>(&utf8), &utf8_len);
355 if (Dart_IsError(result)) { 352 if (Dart_IsError(result)) {
356 Dart_PropagateError(result); 353 Dart_PropagateError(result);
357 } 354 }
358 intptr_t system_len; 355 intptr_t system_len;
359 const char* system_string = 356 const char* system_string =
360 StringUtils::Utf8ToConsoleString(utf8, utf8_len, &system_len); 357 StringUtils::Utf8ToConsoleString(utf8, utf8_len, &system_len);
361 if (system_string == NULL) { 358 if (system_string == NULL) {
362 Dart_ThrowException( 359 Dart_ThrowException(
363 DartUtils::NewInternalError("StringToSystemEncoding failed")); 360 DartUtils::NewInternalError("StringToSystemEncoding failed"));
364 } 361 }
365 uint8_t* buffer = NULL; 362 uint8_t* buffer = NULL;
366 Dart_Handle external_array = IOBuffer::Allocate(system_len, &buffer); 363 Dart_Handle external_array = IOBuffer::Allocate(system_len, &buffer);
367 if (!Dart_IsError(external_array)) { 364 if (!Dart_IsError(external_array)) {
368 memmove(buffer, system_string, system_len); 365 memmove(buffer, system_string, system_len);
369 } 366 }
370 Dart_SetReturnValue(args, external_array); 367 Dart_SetReturnValue(args, external_array);
371 free(const_cast<char*>(system_string));
372 } 368 }
373 369
374 } // namespace bin 370 } // namespace bin
375 } // namespace dart 371 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698