* fhandler_console.cc (fhandler_console::ioctl): Fetch console events
using PeekConsoleInput and return only key down events in buf. * fhandler_tty.cc (fhandler_pty_slave::ioctl): Always return EINVAL if PeekNamedPipe fails. (fhandler_pty_master::ioctl): Ditto.
This commit is contained in:
parent
7d4b10de81
commit
f4fc0c59e3
|
@ -1,3 +1,11 @@
|
||||||
|
2011-07-25 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* fhandler_console.cc (fhandler_console::ioctl): Fetch console events
|
||||||
|
using PeekConsoleInput and return only key down events in buf.
|
||||||
|
* fhandler_tty.cc (fhandler_pty_slave::ioctl): Always return EINVAL
|
||||||
|
if PeekNamedPipe fails.
|
||||||
|
(fhandler_pty_master::ioctl): Ditto.
|
||||||
|
|
||||||
2011-07-22 Corinna Vinschen <corinna@vinschen.de>
|
2011-07-22 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* fhandler_tty.cc (fhandler_pty_slave::ioctl): Drop FIONBIO case.
|
* fhandler_tty.cc (fhandler_pty_slave::ioctl): Drop FIONBIO case.
|
||||||
|
|
|
@ -892,13 +892,21 @@ fhandler_console::ioctl (unsigned int cmd, void *buf)
|
||||||
return -1;
|
return -1;
|
||||||
case FIONREAD:
|
case FIONREAD:
|
||||||
{
|
{
|
||||||
|
/* Per MSDN, max size of buffer required is below 64K. */
|
||||||
|
#define INREC_SIZE (65536 / sizeof (INPUT_RECORD))
|
||||||
|
|
||||||
DWORD n;
|
DWORD n;
|
||||||
if (!GetNumberOfConsoleInputEvents (get_io_handle (), &n))
|
int ret = 0;
|
||||||
|
INPUT_RECORD inp[INREC_SIZE];
|
||||||
|
if (!PeekConsoleInputW (get_io_handle (), inp, INREC_SIZE, &n))
|
||||||
{
|
{
|
||||||
__seterrno ();
|
set_errno (EINVAL);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
*(int *) buf = (int) n;
|
while (n-- > 0)
|
||||||
|
if (inp[n].EventType == KEY_EVENT && inp[n].Event.KeyEvent.bKeyDown)
|
||||||
|
++ret;
|
||||||
|
*(int *) buf = ret;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -981,7 +981,7 @@ fhandler_pty_slave::ioctl (unsigned int cmd, void *arg)
|
||||||
int n;
|
int n;
|
||||||
if (!PeekNamedPipe (get_handle (), NULL, 0, NULL, (DWORD *) &n, NULL))
|
if (!PeekNamedPipe (get_handle (), NULL, 0, NULL, (DWORD *) &n, NULL))
|
||||||
{
|
{
|
||||||
__seterrno ();
|
set_errno (EINVAL);
|
||||||
retval = -1;
|
retval = -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1381,7 +1381,7 @@ fhandler_pty_master::ioctl (unsigned int cmd, void *arg)
|
||||||
int n;
|
int n;
|
||||||
if (!PeekNamedPipe (to_master, NULL, 0, NULL, (DWORD *) &n, NULL))
|
if (!PeekNamedPipe (to_master, NULL, 0, NULL, (DWORD *) &n, NULL))
|
||||||
{
|
{
|
||||||
__seterrno ();
|
set_errno (EINVAL);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
*(int *) arg = n;
|
*(int *) arg = n;
|
||||||
|
|
Loading…
Reference in New Issue