summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2022-06-25 18:14:07 +0100
committerChristopher Baines <mail@cbaines.net>2022-07-08 13:51:34 +0100
commitb4c4a6acb1204ee53e95744236ee89985db32f91 (patch)
tree55ac03203aea7ccc904e9dd706c7ff22fb19e63c /guix
parent37dd7e53b9bf635b62b36cd6b028497048481288 (diff)
downloadguix-patches-b4c4a6acb1204ee53e95744236ee89985db32f91.tar
guix-patches-b4c4a6acb1204ee53e95744236ee89985db32f91.tar.gz
guix: inferior: Fix the behaviour of open-inferior #:error-port.
I'm looking at this as the Guix Data Service uses this behaviour to record and display logs from inferior processes. * guix/inferior.scm (open-bidirectional-pipe): Call dup2 for file descriptor 2, passing either the file number for the current error port, or a file descriptor for /dev/null. * tests/inferior.scm ("#:error-port stderr", "#:error-port pipe"): Add two new tests that cover some of the #:error-port behaviour.
Diffstat (limited to 'guix')
-rw-r--r--guix/inferior.scm12
1 files changed, 9 insertions, 3 deletions
diff --git a/guix/inferior.scm b/guix/inferior.scm
index 54200b75e4..20a86bbfda 100644
--- a/guix/inferior.scm
+++ b/guix/inferior.scm
@@ -156,12 +156,18 @@ custom binary port)."
(close-port parent)
(close-fdes 0)
(close-fdes 1)
+ (close-fdes 2)
(dup2 (fileno child) 0)
(dup2 (fileno child) 1)
;; Mimic 'open-pipe*'.
- (unless (file-port? (current-error-port))
- (close-fdes 2)
- (dup2 (open-fdes "/dev/null" O_WRONLY) 2))
+ (if (file-port? (current-error-port))
+ (let ((error-port-fileno
+ (fileno (current-error-port))))
+ (unless (eq? error-port-fileno 2)
+ (dup2 error-port-fileno
+ 2)))
+ (dup2 (open-fdes "/dev/null" O_WRONLY)
+ 2))
(apply execlp command command args))
(lambda ()
(primitive-_exit 127))))