From: Mike Yuan Date: Fri, 22 Dec 2023 09:59:39 +0000 (+0800) Subject: terminal-util: introduce isatty_safe that rejects EBADF X-Git-Tag: v256-rc1~1417^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=76270f5c090ef103e2f75a73fa9fba8b213828ea;p=thirdparty%2Fsystemd.git terminal-util: introduce isatty_safe that rejects EBADF --- diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index 89823ab7953..c6ced3f7c10 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -54,6 +54,18 @@ static volatile int cached_on_dev_null = -1; static volatile int cached_color_mode = _COLOR_INVALID; static volatile int cached_underline_enabled = -1; +bool isatty_safe(int fd) { + assert(fd >= 0); + + if (isatty(fd)) + return true; + + /* Be resilient if we're working on stdio, since they're set up by parent process. */ + assert(errno != EBADF || IN_SET(fd, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO)); + + return false; +} + int chvt(int vt) { _cleanup_close_ int fd = -EBADF; diff --git a/src/basic/terminal-util.h b/src/basic/terminal-util.h index 1ec057c2dd5..ee60ff4840c 100644 --- a/src/basic/terminal-util.h +++ b/src/basic/terminal-util.h @@ -86,6 +86,8 @@ /* Set cursor to top left corner and clear screen */ #define ANSI_HOME_CLEAR "\x1B[H\x1B[2J" +bool isatty_safe(int fd); + int reset_terminal_fd(int fd, bool switch_to_text); int reset_terminal(const char *name); int set_terminal_cursor_position(int fd, unsigned int row, unsigned int column);