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
73cd80c976
commit
02f7f6543a
|
@ -1131,10 +1131,14 @@ fhandler_console::read (void *pv, size_t& buflen)
|
||||||
|
|
||||||
push_process_state process_state (PID_TTYIN);
|
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 ())
|
while (!input_ready && !get_cons_readahead_valid ())
|
||||||
{
|
{
|
||||||
int bgres;
|
int bgres;
|
||||||
|
@ -1157,6 +1161,11 @@ wait_retry:
|
||||||
pthread::static_cancel_self ();
|
pthread::static_cancel_self ();
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
case WAIT_TIMEOUT:
|
case WAIT_TIMEOUT:
|
||||||
|
if (copied_chars)
|
||||||
|
{
|
||||||
|
buflen = copied_chars;
|
||||||
|
return;
|
||||||
|
}
|
||||||
set_sig_errno (EAGAIN);
|
set_sig_errno (EAGAIN);
|
||||||
buflen = (size_t) -1;
|
buflen = (size_t) -1;
|
||||||
return;
|
return;
|
||||||
|
@ -1204,19 +1213,20 @@ wait_retry:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check console read-ahead buffer filled from terminal requests */
|
/* Check console read-ahead buffer filled from terminal requests */
|
||||||
while (con.cons_rapoi && *con.cons_rapoi && buflen)
|
while (con.cons_rapoi && *con.cons_rapoi && buflen > copied_chars)
|
||||||
{
|
|
||||||
buf[copied_chars++] = *con.cons_rapoi++;
|
buf[copied_chars++] = *con.cons_rapoi++;
|
||||||
buflen --;
|
|
||||||
}
|
|
||||||
|
|
||||||
copied_chars +=
|
copied_chars +=
|
||||||
get_readahead_into_buffer (buf + copied_chars, buflen);
|
get_readahead_into_buffer (buf + copied_chars, buflen - copied_chars);
|
||||||
|
|
||||||
if (!con_ra.ralen)
|
if (!con_ra.ralen)
|
||||||
input_ready = false;
|
input_ready = false;
|
||||||
release_input_mutex ();
|
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
|
#undef buf
|
||||||
|
|
||||||
buflen = copied_chars;
|
buflen = copied_chars;
|
||||||
|
|
|
@ -16,3 +16,5 @@ Fixes:
|
||||||
- Fix handle leak in pty master which occurs when non-cygwin process
|
- Fix handle leak in pty master which occurs when non-cygwin process
|
||||||
is started in pty.
|
is started in pty.
|
||||||
Addresses: https://github.com/msys2/msys2-runtime/issues/198
|
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