From a6d9d23b5f9e3c1d421c1f32a3f1dffe8452cb74 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Mon, 27 May 2019 12:49:12 +0200 Subject: [PATCH] lib/ttyutils: introduce get_terminal_stdfd() Let's use separate function to detect what is the current terminal. Signed-off-by: Karel Zak --- include/pathnames.h | 2 ++ include/ttyutils.h | 1 + lib/ttyutils.c | 27 ++++++++++++++++++--------- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/include/pathnames.h b/include/pathnames.h index bd29b640a5..ee470ee4b0 100644 --- a/include/pathnames.h +++ b/include/pathnames.h @@ -95,6 +95,8 @@ #define _PATH_PROC_GIDMAP "/proc/self/gid_map" #define _PATH_PROC_SETGROUPS "/proc/self/setgroups" +#define _PATH_PROC_FDDIR "/proc/self/fd" + #define _PATH_PROC_ATTR_CURRENT "/proc/self/attr/current" #define _PATH_PROC_ATTR_EXEC "/proc/self/attr/exec" #define _PATH_PROC_CAPLASTCAP "/proc/sys/kernel/cap_last_cap" diff --git a/include/ttyutils.h b/include/ttyutils.h index af979159ae..f164a580fb 100644 --- a/include/ttyutils.h +++ b/include/ttyutils.h @@ -81,6 +81,7 @@ struct chardata { extern int get_terminal_dimension(int *cols, int *lines); extern int get_terminal_width(int default_width); extern int get_terminal_type(const char **type); +extern int get_terminal_stdfd(void); extern int get_terminal_name(const char **path, const char **name, const char **number); diff --git a/lib/ttyutils.c b/lib/ttyutils.c index 00a7903cab..166e49e11a 100644 --- a/lib/ttyutils.c +++ b/lib/ttyutils.c @@ -69,6 +69,18 @@ int get_terminal_width(int default_width) return width > 0 ? width : default_width; } +int get_terminal_stdfd(void) +{ + if (isatty(STDIN_FILENO)) + return STDIN_FILENO; + else if (isatty(STDOUT_FILENO)) + return STDOUT_FILENO; + else if (isatty(STDERR_FILENO)) + return STDERR_FILENO; + + return -EINVAL; +} + int get_terminal_name(const char **path, const char **name, const char **number) @@ -85,21 +97,18 @@ int get_terminal_name(const char **path, 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; + fd = get_terminal_stdfd(); + if (fd < 0) + return fd; /* error */ tty = ttyname(fd); if (!tty) return -1; + if (path) *path = tty; - tty = strncmp(tty, "/dev/", 5) == 0 ? tty + 5 : tty; + if (name || number) + tty = strncmp(tty, "/dev/", 5) == 0 ? tty + 5 : tty; if (name) *name = tty; if (number) { -- 2.39.2