GNU bug report logs - #26371
[PATCH 0/1] tty: do not provide conflicting information

Previous Next

Package: coreutils;

Reported by: Christian Brauner <christian.brauner <at> ubuntu.com>

Date: Wed, 5 Apr 2017 15:27:02 UTC

Severity: normal

Tags: patch

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Christian Brauner <christian.brauner <at> ubuntu.com>
To: coreutils <at> gnu.org, 26371 <at> debbugs.gnu.org, stgraber <at> ubuntu.com, serge <at> hallyn.com
Cc: Christian Brauner <christian.brauner <at> ubuntu.com>
Subject: bug#26371: [PATCH 1/1] tty: do not provide conflicting information
Date: Wed,  5 Apr 2017 16:44:41 +0200
In case the current file descriptor is a tty but ttyname{_r}() fails to retrieve
the device path tty would falsely report "not a tty" but return EXIT_SUCCESS.
This is confusing. Instead, let's first check whether the fd refers to a tty and
if not report "not a tty" and exit with error. In all other cases, we should
report "is a tty but failed to determine the device path" and exit with success.
This is much clearer. Depending on the platform the user can then decide how to
proceed, e.g. by looking at /proc/self/fd/0 for Linux or somewhere else on other
platforms.

Signed-off-by: Christian Brauner <christian.brauner <at> ubuntu.com>
---
 src/tty.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/tty.c b/src/tty.c
index c3fdabc85..fb21a995a 100644
--- a/src/tty.c
+++ b/src/tty.c
@@ -79,6 +79,7 @@ main (int argc, char **argv)
 {
   char *tty;
   int optc;
+  int is_tty;
 
   initialize_main (&argc, &argv);
   set_program_name (argv[0]);
@@ -111,14 +112,21 @@ main (int argc, char **argv)
   if (optind < argc)
     error (0, 0, _("extra operand %s"), quote (argv[optind]));
 
+  is_tty = isatty (STDIN_FILENO);
+  if (!is_tty)
+    {
+      puts (_("not a tty"));
+      return EXIT_FAILURE;
+    }
+
   tty = ttyname (STDIN_FILENO);
   if (!silent)
     {
       if (tty)
         puts (tty);
       else
-        puts (_("not a tty"));
+        puts (_("is a tty but failed to determine the device path"));
     }
 
-  return isatty (STDIN_FILENO) ? EXIT_SUCCESS : EXIT_FAILURE;
+  return EXIT_SUCCESS;
 }
-- 
2.11.0





This bug report was last modified 48 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.