From: Lennart Poettering Date: Wed, 20 Dec 2023 11:01:32 +0000 (+0100) Subject: terminal-util: add helper for disabling terminal echo in termios struct X-Git-Tag: v256-rc1~1428^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d02d4f83f018afc5fde1d9779fbaada362feb612;p=thirdparty%2Fsystemd.git terminal-util: add helper for disabling terminal echo in termios struct --- diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index 3355b749cc0..63aca3684f2 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -1551,3 +1551,11 @@ int set_terminal_cursor_position(int fd, unsigned int row, unsigned int column) return 0; } + +void termios_disable_echo(struct termios *termios) { + assert(termios); + + termios->c_lflag &= ~(ICANON|ECHO); + termios->c_cc[VMIN] = 1; + termios->c_cc[VTIME] = 0; +} diff --git a/src/basic/terminal-util.h b/src/basic/terminal-util.h index cae42887c44..d7537c23bff 100644 --- a/src/basic/terminal-util.h +++ b/src/basic/terminal-util.h @@ -6,6 +6,7 @@ #include #include #include +#include #include "macro.h" #include "time-util.h" @@ -168,7 +169,6 @@ bool underline_enabled(void); bool dev_console_colors_enabled(void); static inline bool colors_enabled(void) { - /* Returns true if colors are considered supported on our stdout. */ return get_color_mode() != COLOR_OFF; } @@ -286,3 +286,5 @@ static inline const char* ansi_highlight_green_red(bool b) { /* This assumes there is a 'tty' group */ #define TTY_MODE 0620 + +void termios_disable_echo(struct termios *termios); diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c index 0e323f4644e..6d71245549d 100644 --- a/src/shared/ask-password-api.c +++ b/src/shared/ask-password-api.c @@ -443,9 +443,7 @@ int ask_password_tty( (void) loop_write(ttyfd, ANSI_NORMAL, SIZE_MAX); new_termios = old_termios; - new_termios.c_lflag &= ~(ICANON|ECHO); - new_termios.c_cc[VMIN] = 1; - new_termios.c_cc[VTIME] = 0; + termios_disable_echo(&new_termios); r = RET_NERRNO(tcsetattr(ttyfd, TCSADRAIN, &new_termios)); if (r < 0)