diff options
author | Sami Kerola | 2016-05-14 20:50:41 +0200 |
---|---|---|
committer | Sami Kerola | 2016-07-04 00:35:10 +0200 |
commit | 285c1f3a3eda762897d45f698e94c461d68e8d68 (patch) | |
tree | e2b99cdb523a2f4341e68da397310925df91f402 /lib/ttyutils.c | |
parent | write: stop removing and adding /dev/ in front of tty string (diff) | |
download | kernel-qcow2-util-linux-285c1f3a3eda762897d45f698e94c461d68e8d68.tar.gz kernel-qcow2-util-linux-285c1f3a3eda762897d45f698e94c461d68e8d68.tar.xz kernel-qcow2-util-linux-285c1f3a3eda762897d45f698e94c461d68e8d68.zip |
lib: try to find tty in get_terminal_name()
Try all standard terminal input/output file descriptors when finding tty
name in get_germinal_name(). This should make all invocations of the
function as robust as they can get.
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'lib/ttyutils.c')
-rw-r--r-- | lib/ttyutils.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/ttyutils.c b/lib/ttyutils.c index 4e62c20d6..06dd800f7 100644 --- a/lib/ttyutils.c +++ b/lib/ttyutils.c @@ -5,6 +5,7 @@ * Written by Karel Zak <kzak@redhat.com> */ #include <ctype.h> +#include <unistd.h> #include "c.h" #include "ttyutils.h" @@ -42,13 +43,14 @@ int get_terminal_width(int default_width) return width > 0 ? width : default_width; } -int get_terminal_name(int fd, - const char **path, +int get_terminal_name(const char **path, const char **name, const char **number) { const char *tty; const char *p; + int fd; + if (name) *name = NULL; @@ -57,6 +59,15 @@ int get_terminal_name(int fd, if (number) *number = NULL; + if (isatty(STDIN_FILENO)) + fd = STDIN_FILENO; + else if (isatty(STDOUT_FILENO)) + fd = STDOUT_FILENO; + else if (isatty(STDERR_FILENO)) + fd = STDERR_FILENO; + else + return -1; + tty = ttyname(fd); if (!tty) return -1; |