2009-12-18 Joel Sherrill <joel.sherrill@oarcorp.com>

* libmisc/shell/login_prompt.c: Switch from non-canonical mode with
	timeout (Case C) to blocking IO waiting for single character on
	login. In Case C mode, you cannot tell EOF from no data available.
	This means we cannot tell when a telnet connection is dropped. This
	was changed from 4.9 and resulted in breakage.
This commit is contained in:
Joel Sherrill
2009-12-18 20:18:30 +00:00
parent 1e0a5512fc
commit 5b914591c6
2 changed files with 21 additions and 10 deletions

View File

@@ -1,3 +1,11 @@
2009-12-18 Joel Sherrill <joel.sherrill@oarcorp.com>
* libmisc/shell/login_prompt.c: Switch from non-canonical mode with
timeout (Case C) to blocking IO waiting for single character on
login. In Case C mode, you cannot tell EOF from no data available.
This means we cannot tell when a telnet connection is dropped. This
was changed from 4.9 and resulted in breakage.
2009-12-01 Sebastian Huber <sebastian.huber@embedded-brains.de>
PR 1474

View File

@@ -159,10 +159,13 @@ bool rtems_shell_login_prompt(
if (tcgetattr( fd_in, &termios_previous) == 0) {
struct termios termios_new = termios_previous;
/*
* Stay in canonical mode so we can tell EOF and dropped connections.
* But read one character at a time and do not echo it.
*/
termios_new.c_lflag &= (unsigned char) ~ECHO;
termios_new.c_lflag &= (unsigned char) ~ICANON;
termios_new.c_cc [VTIME] = 255;
termios_new.c_cc [VMIN] = 0;
termios_new.c_cc [VTIME] = 0;
termios_new.c_cc [VMIN] = 1;
restore_termios = tcsetattr( fd_in, TCSANOW, &termios_new) == 0;
}