From: Karel Zak Date: Tue, 2 May 2023 09:36:49 +0000 (+0200) Subject: sulogin: fix KDGKBMODE ifdef X-Git-Tag: v2.39~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8efec058d7a513c18f5e5666e79006ded786221a;p=thirdparty%2Futil-linux.git 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 --- diff --git a/login-utils/sulogin.c b/login-utils/sulogin.c index e19a3b8b67..98147509c3 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)