lib/ttyutils: introduce get_terminal_stdfd()

Let's use separate function to detect what is the current terminal.

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2019-05-27 12:49:12 +02:00
parent ebd13d3fc5
commit a6d9d23b5f
3 changed files with 21 additions and 9 deletions

View File

@ -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"

View File

@ -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);

View File

@ -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) {