Cygwin: console: Make VMIN and VTIME work.
Previously, VMIN and VTIME did not work at all. This patch fixes that. Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
This commit is contained in:
parent
8e24d162f4
commit
ac92c4c9f5
|
@ -1131,10 +1131,14 @@ fhandler_console::read (void *pv, size_t& buflen)
|
|||
|
||||
push_process_state process_state (PID_TTYIN);
|
||||
|
||||
int copied_chars = 0;
|
||||
size_t copied_chars = 0;
|
||||
|
||||
DWORD timeout = is_nonblocking () ? 0 : INFINITE;
|
||||
DWORD timeout = is_nonblocking () ? 0 :
|
||||
(get_ttyp ()->ti.c_lflag & ICANON ? INFINITE :
|
||||
(get_ttyp ()->ti.c_cc[VMIN] == 0 ? 0 :
|
||||
(get_ttyp ()->ti.c_cc[VTIME]*100 ? : INFINITE)));
|
||||
|
||||
read_more:
|
||||
while (!input_ready && !get_cons_readahead_valid ())
|
||||
{
|
||||
int bgres;
|
||||
|
@ -1157,6 +1161,11 @@ wait_retry:
|
|||
pthread::static_cancel_self ();
|
||||
/*NOTREACHED*/
|
||||
case WAIT_TIMEOUT:
|
||||
if (copied_chars)
|
||||
{
|
||||
buflen = copied_chars;
|
||||
return;
|
||||
}
|
||||
set_sig_errno (EAGAIN);
|
||||
buflen = (size_t) -1;
|
||||
return;
|
||||
|
@ -1204,19 +1213,20 @@ wait_retry:
|
|||
}
|
||||
|
||||
/* Check console read-ahead buffer filled from terminal requests */
|
||||
while (con.cons_rapoi && *con.cons_rapoi && buflen)
|
||||
{
|
||||
buf[copied_chars++] = *con.cons_rapoi++;
|
||||
buflen --;
|
||||
}
|
||||
while (con.cons_rapoi && *con.cons_rapoi && buflen > copied_chars)
|
||||
buf[copied_chars++] = *con.cons_rapoi++;
|
||||
|
||||
copied_chars +=
|
||||
get_readahead_into_buffer (buf + copied_chars, buflen);
|
||||
get_readahead_into_buffer (buf + copied_chars, buflen - copied_chars);
|
||||
|
||||
if (!con_ra.ralen)
|
||||
input_ready = false;
|
||||
release_input_mutex ();
|
||||
|
||||
if (buflen > copied_chars && !(get_ttyp ()->ti.c_lflag & ICANON)
|
||||
&& copied_chars < get_ttyp ()->ti.c_cc[VMIN])
|
||||
goto read_more;
|
||||
|
||||
#undef buf
|
||||
|
||||
buflen = copied_chars;
|
||||
|
|
|
@ -16,3 +16,5 @@ Fixes:
|
|||
- Fix handle leak in pty master which occurs when non-cygwin process
|
||||
is started in pty.
|
||||
Addresses: https://github.com/msys2/msys2-runtime/issues/198
|
||||
|
||||
- Fix the problem that VMIN and VTIME does not work at all in console.
|
||||
|
|
Loading…
Reference in New Issue