* 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.
This commit is contained in:
Christopher Faylor 2002-12-20 01:38:55 +00:00
parent e9f731caf7
commit 388aa9941b
4 changed files with 25 additions and 6 deletions

View File

@ -1,3 +1,13 @@
2002-12-19 Steve Osborn <bub@io.com>
* 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 <bub@io.com>
Christopher Faylor <cgf@redhat.com>

View File

@ -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

View File

@ -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;
}

View File

@ -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<len; i++)
if (line_edit (p++, 1) == line_edit_error)
for (i=0; i < (int) len; i++)
{
line_edit_status status = line_edit (p++, 1);
if (status == line_edit_ok || status == line_edit_input_done)
continue;
if (status != line_edit_pipe_full)
i = -1;
break;
}
return i;
}