Gene Cumm
2009-Feb-15 22:24 UTC
[syslinux] [PATCH 1/1] COM32 libutil: Fix error in flags in console_ansi_std(void)
From: Gene Cumm <gene.cumm at gmail.com> COM32 libutil: Fix error in flags in console_ansi_std(void) ICANON and ECHO were applied to the control flags not local flags. Signed-off-by: Gene Cumm <gene.cumm at gmail.com> --- If ICANON or ECHO were applied to a serial port on Linux on the x86 architecture, this would change the serial ports baud rate.>From my /usr/include/bits/termios.h (select in-order lines):/* c_cflag bit meaning */ #define B150 0000005 #define B300 0000007 #define B9600 0000015 #define B38400 0000017 /* c_lflag bits */ #define ICANON 0000002 #define ECHO 0000010 The different baud rates are defined here. If someone set the baud rate to 9600 and set ICANON on c_cflag, it should change the baud rate to 38400, dropping communication. Another example is if someone set the baud rate to 150 the set ICANON and ECHO on c_cflag, it should change the baud to 38400. If I am interpreting the rest of the file correctly, a bitmask covering all of the bits used in c_cflag for the baud rate is 0010017. diff --git a/com32/libutil/ansiline.c b/com32/libutil/ansiline.c index 6ec1e18..4cf8021 100644 --- a/com32/libutil/ansiline.c +++ b/com32/libutil/ansiline.c @@ -82,7 +85,7 @@ void console_ansi_std(void) tcgetattr(0, &tio); tio.c_iflag &= ~ICRNL; tio.c_iflag |= IGNCR; - tio.c_cflag |= ICANON|ECHO; + tio.c_lflag |= ICANON|ECHO; tcsetattr(0, TCSANOW, &tio); fputs("\033[0m\033[20h", stdout); }