[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/04: linux-container: Do not rely on 'isatty?'.

From: Ludovic Courtès
Subject: 01/04: linux-container: Do not rely on 'isatty?'.
Date: Mon, 6 Feb 2017 09:51:52 +0000 (UTC)

civodul pushed a commit to branch master
in repository guix.

commit 168aba297866295d96779239e9662821ce9e66ae
Author: Ludovic Courtès <address@hidden>
Date:   Sat Feb 4 18:10:14 2017 +0100

    linux-container: Do not rely on 'isatty?'.
    This avoids problems where 'isatty?' return #t but 'ttyname' fails with
    ENOTTY or such.
    * gnu/build/linux-container.scm (mount-file-systems): Remove call of
    'isatty?'.  Directly call 'ttyname' and catch 'system-error'.
 gnu/build/linux-container.scm |   16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/gnu/build/linux-container.scm b/gnu/build/linux-container.scm
index b71d6a5..cd71239 100644
--- a/gnu/build/linux-container.scm
+++ b/gnu/build/linux-container.scm
@@ -128,13 +128,19 @@ for the process."
   ;; Setup the container's /dev/console by bind mounting the pseudo-terminal
-  ;; associated with standard input.
-  (let ((in      (current-input-port))
-        (console (scope "/dev/console")))
-    (when (isatty? in)
+  ;; associated with standard input when there is one.
+  (let* ((in      (current-input-port))
+         (tty     (catch 'system-error
+                    (lambda ()
+                      ;; This call throws if IN does not correspond to a tty.
+                      ;; This is more reliable than 'isatty?'.
+                      (ttyname in))
+                    (const #f)))
+         (console (scope "/dev/console")))
+    (when tty
       (touch console)
       (chmod console #o600)
-      (bind-mount (ttyname in) console)))
+      (bind-mount tty console)))
   ;; Setup standard input/output/error.
   (symlink "/proc/self/fd"   (scope "/dev/fd"))

reply via email to

[Prev in Thread] Current Thread [Next in Thread]