* 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:
parent
e9f731caf7
commit
388aa9941b
|
@ -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>
|
2002-12-16 Steve Osborn <bub@io.com>
|
||||||
Christopher Faylor <cgf@redhat.com>
|
Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,8 @@ enum line_edit_status
|
||||||
line_edit_signalled = -1,
|
line_edit_signalled = -1,
|
||||||
line_edit_ok = 0,
|
line_edit_ok = 0,
|
||||||
line_edit_input_done = 1,
|
line_edit_input_done = 1,
|
||||||
line_edit_error = 2
|
line_edit_error = 2,
|
||||||
|
line_edit_pipe_full = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
enum bg_check_types
|
enum bg_check_types
|
||||||
|
|
|
@ -326,9 +326,10 @@ fhandler_termios::line_edit (const char *rptr, int nread, int always_accept)
|
||||||
put_readahead (c);
|
put_readahead (c);
|
||||||
if (!iscanon || always_accept || input_done)
|
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);
|
eat_readahead (1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,6 +169,7 @@ fhandler_pty_master::accept_input ()
|
||||||
{
|
{
|
||||||
debug_printf ("error writing to pipe %E");
|
debug_printf ("error writing to pipe %E");
|
||||||
get_ttyp ()->read_retval = -1;
|
get_ttyp ()->read_retval = -1;
|
||||||
|
ret = -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1077,11 +1078,17 @@ fhandler_pty_master::close ()
|
||||||
int
|
int
|
||||||
fhandler_pty_master::write (const void *ptr, size_t len)
|
fhandler_pty_master::write (const void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
size_t i;
|
int i;
|
||||||
char *p = (char *) ptr;
|
char *p = (char *) ptr;
|
||||||
for (i=0; i<len; i++)
|
for (i=0; i < (int) len; i++)
|
||||||
if (line_edit (p++, 1) == line_edit_error)
|
{
|
||||||
|
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;
|
break;
|
||||||
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue