diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index d932e9c3a..c19dfdb3d 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2002-12-14 Steve Osborn + + * fhandler_termios.cc (fhandler_termios::line_edit): Call + accept_input() in character processing loop. Set return value + independently of input_done. + 2002-12-14 Christopher Faylor * fhandler.cc (fhandler_base::read): Signal event, if necessary, and diff --git a/winsup/cygwin/fhandler_termios.cc b/winsup/cygwin/fhandler_termios.cc index 6fa5cf984..16a826bd9 100644 --- a/winsup/cygwin/fhandler_termios.cc +++ b/winsup/cygwin/fhandler_termios.cc @@ -308,7 +308,8 @@ fhandler_termios::line_edit (const char *rptr, int nread, int always_accept) else if (CCEQ (tc->ti.c_cc[VEOF], c)) { termios_printf ("EOF"); - input_done = 1; + (void) accept_input(); + ret = line_edit_input_done; continue; } else if (CCEQ (tc->ti.c_cc[VEOL], c) || @@ -323,20 +324,21 @@ fhandler_termios::line_edit (const char *rptr, int nread, int always_accept) c = cyg_tolower (c); put_readahead (c); + if (!iscanon || always_accept || input_done) + { + (void) accept_input(); + ret = line_edit_input_done; + input_done = 0; + } if (tc->ti.c_lflag & ECHO) doecho (&c, 1); } - if (!iscanon || always_accept) - set_input_done (ralen > 0); + if ((!iscanon || always_accept) && ralen > 0) + ret = line_edit_input_done; if (sawsig) ret = line_edit_signalled; - else if (input_done) - { - ret = line_edit_input_done; - (void) accept_input (); - } return ret; }