4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-03-03 13:35:46 +08:00

Cygwin: console: Fix new bugs in cons_master_thread().

- The previous commit for console introduced new bugs in error
  handling in cons_master_thread(). This patch fixes that.
This commit is contained in:
Takashi Yano 2022-07-03 10:38:13 +09:00
parent 746c8116dd
commit 2c2c2b631b

View File

@ -361,7 +361,8 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp)
{
case WAIT_OBJECT_0:
total_read = 0;
while (cygwait (p->input_handle, (DWORD) 0) == WAIT_OBJECT_0)
while (cygwait (p->input_handle, (DWORD) 0) == WAIT_OBJECT_0
&& total_read < inrec_size)
{
DWORD len;
ReadConsoleInputW (p->input_handle, input_rec + total_read,
@ -478,7 +479,8 @@ remove_record:
/* Try to fix */
acquire_attach_mutex (mutex_timeout);
n = 0;
while (cygwait (p->input_handle, (DWORD) 0) == WAIT_OBJECT_0)
while (cygwait (p->input_handle, (DWORD) 0) == WAIT_OBJECT_0
&& n < inrec_size)
{
DWORD len;
ReadConsoleInputW (p->input_handle, input_tmp + n,
@ -493,14 +495,13 @@ remove_record:
if (total_read + j - i >= n)
{ /* Something is wrong. Giving up. */
acquire_attach_mutex (mutex_timeout);
WriteConsoleInputW (p->input_handle, input_tmp, n, &n);
n = 0;
while (n < total_read)
DWORD l = 0;
while (l < n)
{
DWORD len;
WriteConsoleInputW (p->input_handle, input_rec + n,
min (total_read - n, inrec_size1), &len);
n += len;
WriteConsoleInputW (p->input_handle, input_tmp + l,
min (n - l, inrec_size1), &len);
l += len;
}
release_attach_mutex ();
goto skip_writeback;