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

Unified Diff: runtime/bin/process_patch.dart

Issue 11783009: Big merge from experimental to bleeding edge. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 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
« no previous file with comments | « runtime/bin/io.dart ('k') | runtime/bin/socket_patch.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/process_patch.dart
diff --git a/runtime/bin/process_patch.dart b/runtime/bin/process_patch.dart
index 34ca47685a2d2e0ffa2150fbfa453b8f4be2d49d..fc5f72b3d0c4bb3a8628abba6f05bb62fb9f8786 100644
--- a/runtime/bin/process_patch.dart
+++ b/runtime/bin/process_patch.dart
@@ -53,7 +53,7 @@ class _ProcessImpl extends NativeFieldWrapperClass1 implements Process {
throw new ArgumentError("Arguments is not a List: $arguments");
}
int len = arguments.length;
- _arguments = new List<String>(len);
+ _arguments = new List<String>.fixedLength(len);
for (int i = 0; i < len; i++) {
var arg = arguments[i];
if (arg is !String) {
@@ -170,7 +170,7 @@ class _ProcessImpl extends NativeFieldWrapperClass1 implements Process {
_out.close();
_err.close();
_exitHandler.close();
- completer.completeException(
+ completer.completeError(
new ProcessException(_path,
_arguments,
status._errorMessage,
@@ -194,7 +194,7 @@ class _ProcessImpl extends NativeFieldWrapperClass1 implements Process {
// callback when a process terminates.
int exitDataRead = 0;
final int EXIT_DATA_SIZE = 8;
- List<int> exitDataBuffer = new List<int>(EXIT_DATA_SIZE);
+ List<int> exitDataBuffer = new List<int>.fixedLength(EXIT_DATA_SIZE);
_exitHandler.inputStream.onData = () {
int exitCode(List<int> ints) {
@@ -206,9 +206,8 @@ class _ProcessImpl extends NativeFieldWrapperClass1 implements Process {
void handleExit() {
_ended = true;
- if (_onExit != null) {
- _onExit(exitCode(exitDataBuffer));
- }
+ _exitCode = exitCode(exitDataBuffer);
+ if (_onExit != null) _onExit(_exitCode);
_out.close();
}
@@ -257,12 +256,28 @@ class _ProcessImpl extends NativeFieldWrapperClass1 implements Process {
return _kill(this, signal._signalNumber);
}
+ void add(List<int> data) {
+ stdin.write(data);
+ }
+
+ void close() {
+ stdin.close();
+ }
+
+ void signalError(ASyncError error) {
+ // TODO(ajohnsen): close?
+ }
+
+ Stream<List<int>> get stdoutStream
+ => new _InputStreamController(stdout).stream;
+
+ Stream<List<int>> get stderrStream
+ => new _InputStreamController(stderr).stream;
+
bool _kill(Process p, int signal) native "Process_Kill";
void set onExit(void callback(int exitCode)) {
- if (_ended) {
- throw new ProcessException(_path, _arguments, "Process killed");
- }
+ if (_ended) callback(_exitCode);
_onExit = callback;
}
@@ -275,6 +290,7 @@ class _ProcessImpl extends NativeFieldWrapperClass1 implements Process {
_Socket _out;
_Socket _err;
Socket _exitHandler;
+ int _exitCode;
bool _ended;
bool _started;
Function _onExit;
@@ -346,11 +362,8 @@ class _NonInteractiveProcess {
_stderrClosed = true;
_checkDone();
};
- });
-
- processFuture.handleException((error) {
- _completer.completeException(error);
- return true;
+ }).catchError((error) {
+ _completer.completeError(error.error);
});
}
« no previous file with comments | « runtime/bin/io.dart ('k') | runtime/bin/socket_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698