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

Unified Diff: runtime/bin/process.cc

Issue 21816002: Add Process.runSync for running processe synchronously. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixed Mac OS issue Created 7 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: runtime/bin/process.cc
diff --git a/runtime/bin/process.cc b/runtime/bin/process.cc
index 21750f1ea9c245eea981eb0f14359690101c1892..fe87daf0635fdd26292cda821b4c524cf124c63c 100644
--- a/runtime/bin/process.cc
+++ b/runtime/bin/process.cc
@@ -159,6 +159,48 @@ void FUNCTION_NAME(Process_Start)(Dart_NativeArguments args) {
}
+void FUNCTION_NAME(Process_Wait)(Dart_NativeArguments args) {
+ Dart_EnterScope();
+ Dart_Handle process = Dart_GetNativeArgument(args, 0);
+ Dart_Handle stdin_handle = Dart_GetNativeArgument(args, 1);
+ Dart_Handle stdout_handle = Dart_GetNativeArgument(args, 2);
+ Dart_Handle stderr_handle = Dart_GetNativeArgument(args, 3);
+ Dart_Handle exit_handle = Dart_GetNativeArgument(args, 4);
+ intptr_t process_stdin;
+ intptr_t process_stdout;
+ intptr_t process_stderr;
+ intptr_t exit_event;
+ Socket::GetSocketIdNativeField(stdin_handle, &process_stdin);
+ Socket::GetSocketIdNativeField(stdout_handle, &process_stdout);
+ Socket::GetSocketIdNativeField(stderr_handle, &process_stderr);
+ Socket::GetSocketIdNativeField(exit_handle, &exit_event);
+ ProcessResult result;
+ intptr_t pid;
+ Process::GetProcessIdNativeField(process, &pid);
+ if (Process::Wait(pid,
+ process_stdin,
+ process_stdout,
+ process_stderr,
+ exit_event,
+ &result)) {
+ Dart_Handle out =
+ IOBuffer::Create(result.stdout_data(), result.stdout_length());
+ Dart_Handle err =
+ IOBuffer::Create(result.stderr_data(), result.stderr_length());
+ Dart_Handle list = Dart_NewList(4);
+ Dart_ListSetAt(list, 0, Dart_NewInteger(pid));
+ Dart_ListSetAt(list, 1, Dart_NewInteger(result.exit_code()));
+ Dart_ListSetAt(list, 2, out);
+ Dart_ListSetAt(list, 3, err);
+ Dart_SetReturnValue(args, list);
+ } else {
+ Process::Kill(pid, 9);
+ Dart_ThrowException(DartUtils::NewDartOSError());
+ }
+ Dart_ExitScope();
+}
+
+
void FUNCTION_NAME(Process_Kill)(Dart_NativeArguments args) {
Dart_Handle process = Dart_GetNativeArgument(args, 1);
intptr_t pid = -1;

Powered by Google App Engine
This is Rietveld 408576698