mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Use /dev/null in 'piped-process' if port is not backed by a fdes.
In Guile 3.0.9, 'system*' would no longer open /dev/null for file descriptors 0, 1, and 2 when its 'current-input-port', 'current-output-port', or 'current-output-port' is not bound to a file port. This patch reinstates that behavior. Fixes <https://bugs.gnu.org/63024>. * libguile/posix.c (piped_process): Open /dev/null to use as in/out/err if the corresponding port is not backed by a file descriptor. * test-suite/tests/posix.test ("system*")["https://bugs.gnu.org/63024"]: New test. * NEWS: Update. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
ccd7400fdb
commit
36fd2b4920
3 changed files with 29 additions and 5 deletions
|
@ -1562,10 +1562,22 @@ piped_process (pid_t *pid, SCM prog, SCM args, SCM from, SCM to)
|
|||
|
||||
if (SCM_OPOUTFPORTP ((port = scm_current_error_port ())))
|
||||
err = SCM_FPORT_FDES (port);
|
||||
if (out == -1 && SCM_OPOUTFPORTP ((port = scm_current_output_port ())))
|
||||
out = SCM_FPORT_FDES (port);
|
||||
if (in == -1 && SCM_OPINFPORTP ((port = scm_current_input_port ())))
|
||||
in = SCM_FPORT_FDES (port);
|
||||
else
|
||||
err = open ("/dev/null", O_WRONLY | O_CLOEXEC);
|
||||
if (out == -1)
|
||||
{
|
||||
if (SCM_OPOUTFPORTP ((port = scm_current_output_port ())))
|
||||
out = SCM_FPORT_FDES (port);
|
||||
else
|
||||
out = open ("/dev/null", O_WRONLY | O_CLOEXEC);
|
||||
}
|
||||
if (in == -1)
|
||||
{
|
||||
if (SCM_OPINFPORTP ((port = scm_current_input_port ())))
|
||||
in = SCM_FPORT_FDES (port);
|
||||
else
|
||||
in = open ("/dev/null", O_RDONLY | O_CLOEXEC);
|
||||
}
|
||||
}
|
||||
|
||||
*pid = do_spawn (exec_file, exec_argv, exec_env, in, out, err, 1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue