From 8efec058d7a513c18f5e5666e79006ded786221a Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 2 May 2023 11:36:49 +0200 Subject: [PATCH] sulogin: fix KDGKBMODE ifdef * remove ifdef-else for KDGKBMODE * always call KDGKBMODE for virtual console to get K_UNICODE status * use KDGKBMODE as a fallback to detect serial line Fixes: https://github.com/util-linux/util-linux/issues/2185 Suggested-by: Marcos Mello Signed-off-by: Karel Zak --- login-utils/sulogin.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/login-utils/sulogin.c b/login-utils/sulogin.c index 851d92d..3507272 100644 --- a/login-utils/sulogin.c +++ b/login-utils/sulogin.c @@ -108,7 +108,7 @@ static void tcinit(struct console *con) struct termios *tio = &con->tio; const int fd = con->fd; #if defined(TIOCGSERIAL) - struct serial_struct serinfo; + struct serial_struct serinfo = { .flags = 0 }; #endif #ifdef USE_PLYMOUTH_SUPPORT struct termios lock; @@ -132,18 +132,18 @@ static void tcinit(struct console *con) errno = 0; #endif -#if defined(TIOCGSERIAL) +#ifdef TIOCGSERIAL if (ioctl(fd, TIOCGSERIAL, &serinfo) >= 0) con->flags |= CON_SERIAL; errno = 0; -#else -# if defined(KDGKBMODE) - if (ioctl(fd, KDGKBMODE, &mode) < 0) +#endif + +#ifdef KDGKBMODE + if (!(con->flags & CON_SERIAL) + && ioctl(fd, KDGKBMODE, &mode) < 0) con->flags |= CON_SERIAL; errno = 0; -# endif #endif - if (tcgetattr(fd, tio) < 0) { int saveno = errno; #if defined(KDGKBMODE) || defined(TIOCGSERIAL) -- 2.33.0