@@ -8,20 +8,33 @@ type command_result =
88 }
99
1010let run_command prog stdin_value args : command_result Fiber.t =
11- let * stdin_i, stdin_o = Lev_fiber.Io . pipe ~cloexec: true () in
12- let * stdout_i, stdout_o = Lev_fiber.Io . pipe ~cloexec: true () in
13- let * stderr_i, stderr_o = Lev_fiber.Io . pipe ~cloexec: true () in
11+ let stdin_i, stdin_o = Unix . pipe ~cloexec: true () in
12+ let stdout_i, stdout_o = Unix . pipe ~cloexec: true () in
13+ let stderr_i, stderr_o = Unix . pipe ~cloexec: true () in
1414 let pid =
15- let fd io = Lev_fiber.Fd. fd (Lev_fiber.Io. fd io) in
16- let stdin = fd stdin_i in
17- let stdout = fd stdout_o in
18- let stderr = fd stderr_o in
1915 let argv = prog :: args in
20- Spawn. spawn ~prog ~argv ~stdin ~stdout ~stderr () |> Stdune.Pid. of_int
16+ Spawn. spawn ~prog ~argv ~stdin: stdin_i ~stdout: stdout_o ~stderr: stderr_o ()
17+ |> Stdune.Pid. of_int
2118 in
22- Lev_fiber.Io. close stdin_i;
23- Lev_fiber.Io. close stdout_o;
24- Lev_fiber.Io. close stderr_o;
19+ Unix. close stdin_i;
20+ Unix. close stdout_o;
21+ Unix. close stderr_o;
22+ let blockity =
23+ if Sys. win32 then
24+ `Blocking
25+ else (
26+ Unix. set_nonblock stdin_o;
27+ Unix. set_nonblock stdout_i;
28+ `Non_blocking true
29+ )
30+ in
31+ let make fd what =
32+ let fd = Lev_fiber.Fd. create fd blockity in
33+ Lev_fiber.Io. create fd what
34+ in
35+ let * stdin_o = make stdin_o Output in
36+ let * stdout_i = make stdout_i Input in
37+ let * stderr_i = make stderr_i Input in
2538 let stdin () =
2639 let + () =
2740 Lev_fiber.Io. with_write stdin_o ~f: (fun w ->
0 commit comments