2
2
import str:: sbuf;
3
3
import vec:: vbuf;
4
4
5
+ export program;
6
+ export run_program;
7
+ export start_program;
8
+ export program_output;
9
+
5
10
native "rust" mod rustrt {
6
11
fn rust_run_program ( vbuf argv, int in_fd , int out_fd , int err_fd ) -> int ;
7
12
}
@@ -13,12 +18,18 @@ fn arg_vec(str prog, vec[str] args) -> vec[sbuf] {
13
18
ret argptrs;
14
19
}
15
20
16
- fn run_program ( str prog , vec[ str] args ) -> int {
21
+ fn spawn_process ( str prog , vec[ str] args ,
22
+ int in_fd , int out_fd , int err_fd ) -> int {
17
23
// Note: we have to hold on to this vector reference while we hold a
18
24
// pointer to its buffer
19
25
auto argv = arg_vec ( prog, args) ;
20
- auto pid = rustrt:: rust_run_program ( vec:: buf ( argv) , 0 , 0 , 0 ) ;
21
- ret os:: waitpid ( pid) ;
26
+ auto pid = rustrt:: rust_run_program ( vec:: buf ( argv) ,
27
+ in_fd, out_fd, err_fd) ;
28
+ ret pid;
29
+ }
30
+
31
+ fn run_program ( str prog , vec[ str] args ) -> int {
32
+ ret os:: waitpid ( spawn_process ( prog, args, 0 , 0 , 0 ) ) ;
22
33
}
23
34
24
35
type program =
@@ -33,12 +44,8 @@ type program =
33
44
fn start_program ( str prog , vec[ str] args ) -> @program {
34
45
auto pipe_input = os:: pipe ( ) ;
35
46
auto pipe_output = os:: pipe ( ) ;
36
- // Note: we have to hold on to this vector reference while we hold a
37
- // pointer to its buffer
38
- auto argv = arg_vec ( prog, args) ;
39
- auto pid =
40
- rustrt:: rust_run_program ( vec:: buf ( argv) ,
41
- pipe_input. _0 , pipe_output. _1 , 0 ) ;
47
+ auto pid = spawn_process ( prog, args, pipe_input. _0 , pipe_output. _1 , 0 ) ;
48
+
42
49
if ( pid == -1 ) { fail; }
43
50
os:: libc:: close ( pipe_input. _0 ) ;
44
51
os:: libc:: close ( pipe_output. _1 ) ;
0 commit comments