diff --git a/src/lib/eunix.ml b/src/lib/eunix.ml index c803b6f..1aa63e0 100644 --- a/src/lib/eunix.ml +++ b/src/lib/eunix.ml @@ -32,16 +32,14 @@ let get_user_and_host fs = external getpgrp : unit -> int = "caml_merry_getpgrp" external tcgetpgrp : Unix.file_descr -> int = "caml_merry_tcgetpgrp" -external tcsetpgrp : int -> int -> int = "caml_merry_tcsetpgrp" +external tcsetpgrp : Unix.file_descr -> int -> int = "caml_merry_tcsetpgrp" let delegate_control ~pgid fn = - let shell_pid = Unix.getpid () in + let shell_pid = getpgrp () in Fun.protect - ~finally:(fun () -> - let _ : int = tcsetpgrp 0 shell_pid in - ()) + ~finally:(fun () -> assert (Int.equal 0 @@ tcsetpgrp Unix.stdin shell_pid)) (fun () -> - match tcsetpgrp (Obj.magic Unix.stdin : int) pgid with + match tcsetpgrp Unix.stdin pgid with | 0 -> fn () | n -> Fmt.failwith "tcsetpgrp: %i" n)