* fhandler.h (fhandler_termios::line_edit): Change return from an int to an

enum to allow the function to return an error.
* fhandler_console.cc (fhandler_console::read): Update the line_edit call to
use the new enum.
* fhandler_termios.cc (fhandler_termios::line_edit): Change return from an int
to an enum to allow the function to return an error.  Put put_readahead call
before doecho for future patch.
* fhandler_tty.cc (fhandler_pty_master::write): Change to call line_edit one
character at a time, and stop if an error occurs.
This commit is contained in:
Christopher Faylor 2002-12-05 16:24:52 +00:00
parent 94d815b251
commit 49dd6fc61e
5 changed files with 40 additions and 12 deletions

View File

@ -1,3 +1,15 @@
2002-12-04 Steve Osborn <bub@io.com>
* fhandler.h (fhandler_termios::line_edit): Change return from an int
to an enum to allow the function to return an error.
* fhandler_console.cc (fhandler_console::read): Update the line_edit
call to use the new enum.
* fhandler_termios.cc (fhandler_termios::line_edit): Change return from
an int to an enum to allow the function to return an error. Put
put_readahead call before doecho for future patch.
* fhandler_tty.cc (fhandler_pty_master::write): Change to call
line_edit one character at a time, and stop if an error occurs.
2002-12-04 Craig McGeachie <slapdau@yahoo.com.au> 2002-12-04 Craig McGeachie <slapdau@yahoo.com.au>
* netdb.cc: New file. * netdb.cc: New file.

View File

@ -118,6 +118,14 @@ typedef struct __DIR DIR;
struct dirent; struct dirent;
struct iovec; struct iovec;
enum line_edit_status
{
line_edit_signalled = -1,
line_edit_ok = 0,
line_edit_input_done = 1,
line_edit_error = 2
};
enum bg_check_types enum bg_check_types
{ {
bg_error = -1, bg_error = -1,
@ -693,7 +701,7 @@ class fhandler_termios: public fhandler_base
set_need_fork_fixup (); set_need_fork_fixup ();
} }
HANDLE& get_output_handle () { return output_handle; } HANDLE& get_output_handle () { return output_handle; }
int line_edit (const char *rptr, int nread, int always_accept = 0); line_edit_status line_edit (const char *rptr, int nread, int always_accept = 0);
void set_output_handle (HANDLE h) { output_handle = h; } void set_output_handle (HANDLE h) { output_handle = h; }
void tcinit (tty_min *this_tc, int force = FALSE); void tcinit (tty_min *this_tc, int force = FALSE);
virtual int is_tty () { return 1; } virtual int is_tty () { return 1; }

View File

@ -457,10 +457,10 @@ fhandler_console::read (void *pv, size_t buflen)
if (toadd) if (toadd)
{ {
int res = line_edit (toadd, nread); line_edit_status res = line_edit (toadd, nread);
if (res < 0) if (res == line_edit_signalled)
goto sig_exit; goto sig_exit;
else if (res) else if (res == line_edit_input_done)
break; break;
} }
#undef ich #undef ich

View File

@ -186,9 +186,10 @@ fhandler_termios::echo_erase (int force)
doecho ("\b \b", 3); doecho ("\b \b", 3);
} }
int line_edit_status
fhandler_termios::line_edit (const char *rptr, int nread, int always_accept) fhandler_termios::line_edit (const char *rptr, int nread, int always_accept)
{ {
line_edit_status ret = line_edit_ok;
char c; char c;
int input_done = 0; int input_done = 0;
bool sawsig = FALSE; bool sawsig = FALSE;
@ -321,20 +322,23 @@ fhandler_termios::line_edit (const char *rptr, int nread, int always_accept)
if (tc->ti.c_iflag & IUCLC && isupper (c)) if (tc->ti.c_iflag & IUCLC && isupper (c))
c = cyg_tolower (c); c = cyg_tolower (c);
put_readahead (c);
if (tc->ti.c_lflag & ECHO) if (tc->ti.c_lflag & ECHO)
doecho (&c, 1); doecho (&c, 1);
put_readahead (c);
} }
if (!iscanon || always_accept) if (!iscanon || always_accept)
set_input_done (ralen > 0); set_input_done (ralen > 0);
if (sawsig) if (sawsig)
input_done = -1; ret = line_edit_signalled;
else if (input_done) else if (input_done)
(void) accept_input (); {
ret = line_edit_input_done;
(void) accept_input ();
}
return input_done; return ret;
} }
void void

View File

@ -167,7 +167,7 @@ fhandler_pty_master::accept_input ()
get_ttyp ()->read_retval = -1; get_ttyp ()->read_retval = -1;
break; break;
} }
else else
get_ttyp ()->read_retval = 1; get_ttyp ()->read_retval = 1;
p += written; p += written;
@ -1077,8 +1077,12 @@ 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)
{ {
(void) line_edit ((char *) ptr, len); size_t i;
return len; char *p = (char *) ptr;
for (i=0; i<len; i++)
if (line_edit (p++, 1) == line_edit_error)
break;
return i;
} }
int __stdcall int __stdcall