From 388aa9941b2432a02513283858cac6c74bb25a0d Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Fri, 20 Dec 2002 01:38:55 +0000 Subject: [PATCH] * fhandler.h (line_edit_status): Add a new element. * fhandler_termios.cc (fhandler_termios::line_edit): After accept_input, handle both potential error condition and pipe full conditions. * fhandler_tty.cc (fhandler_pty_master::accept_input): Return -1 on error. (fhandler_pty_master::write): Handle pipe full condition. --- winsup/cygwin/ChangeLog | 10 ++++++++++ winsup/cygwin/fhandler.h | 3 ++- winsup/cygwin/fhandler_termios.cc | 5 +++-- winsup/cygwin/fhandler_tty.cc | 13 ++++++++++--- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index f0015a183..5e2643ca7 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,13 @@ +2002-12-19 Steve Osborn + + * fhandler.h (line_edit_status): Add a new element. + * fhandler_termios.cc (fhandler_termios::line_edit): After + accept_input, handle both potential error condition and pipe full + conditions. + * fhandler_tty.cc (fhandler_pty_master::accept_input): Return -1 on + error. + (fhandler_pty_master::write): Handle pipe full condition. + 2002-12-16 Steve Osborn Christopher Faylor diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 0e7b02704..bea1bf26c 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -123,7 +123,8 @@ enum line_edit_status line_edit_signalled = -1, line_edit_ok = 0, line_edit_input_done = 1, - line_edit_error = 2 + line_edit_error = 2, + line_edit_pipe_full = 3 }; enum bg_check_types diff --git a/winsup/cygwin/fhandler_termios.cc b/winsup/cygwin/fhandler_termios.cc index e6a113241..9cd2561fa 100644 --- a/winsup/cygwin/fhandler_termios.cc +++ b/winsup/cygwin/fhandler_termios.cc @@ -326,9 +326,10 @@ fhandler_termios::line_edit (const char *rptr, int nread, int always_accept) put_readahead (c); if (!iscanon || always_accept || input_done) { - if (!accept_input ()) + int status = accept_input (); + if (status != 1) { - ret = line_edit_error; + ret = status ? line_edit_error : line_edit_pipe_full; eat_readahead (1); break; } diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index f5f0c79e2..0a5ba76f6 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -169,6 +169,7 @@ fhandler_pty_master::accept_input () { debug_printf ("error writing to pipe %E"); get_ttyp ()->read_retval = -1; + ret = -1; } else { @@ -1077,11 +1078,17 @@ fhandler_pty_master::close () int fhandler_pty_master::write (const void *ptr, size_t len) { - size_t i; + int i; char *p = (char *) ptr; - for (i=0; i