kernel32: Use new IOCTL_CONDRV_SCROLL ioctl for FlushConsoleInputBuffer implementation.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
591cb80dea
commit
6f05b299bc
|
@ -148,38 +148,12 @@ HANDLE WINAPI GetConsoleInputWaitHandle(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* read_console_input
|
|
||||||
*
|
|
||||||
* Helper function for ReadConsole, ReadConsoleInput and FlushConsoleInputBuffer
|
|
||||||
*
|
|
||||||
* Returns
|
|
||||||
* 0 for error, 1 for no INPUT_RECORD ready, 2 with INPUT_RECORD ready
|
|
||||||
*/
|
|
||||||
enum read_console_input_return {rci_error = 0, rci_timeout = 1, rci_gotone = 2};
|
|
||||||
|
|
||||||
static enum read_console_input_return read_console_input(HANDLE handle, PINPUT_RECORD ir, DWORD timeout)
|
|
||||||
{
|
|
||||||
int blocking = timeout != 0;
|
|
||||||
DWORD read_bytes;
|
|
||||||
|
|
||||||
if (!DeviceIoControl( handle, IOCTL_CONDRV_READ_INPUT, &blocking, sizeof(blocking), ir, sizeof(*ir), &read_bytes, NULL ))
|
|
||||||
return rci_error;
|
|
||||||
return read_bytes ? rci_gotone : rci_timeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* FlushConsoleInputBuffer (KERNEL32.@)
|
* FlushConsoleInputBuffer (KERNEL32.@)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI FlushConsoleInputBuffer( HANDLE handle )
|
BOOL WINAPI FlushConsoleInputBuffer( HANDLE handle )
|
||||||
{
|
{
|
||||||
enum read_console_input_return last;
|
return DeviceIoControl( handle, IOCTL_CONDRV_FLUSH, NULL, 0, NULL, 0, NULL, NULL );
|
||||||
INPUT_RECORD ir;
|
|
||||||
|
|
||||||
while ((last = read_console_input(handle, &ir, 0)) == rci_gotone);
|
|
||||||
|
|
||||||
return last == rci_timeout;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#define IOCTL_CONDRV_SET_TITLE CTL_CODE(FILE_DEVICE_CONSOLE, 17, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
#define IOCTL_CONDRV_SET_TITLE CTL_CODE(FILE_DEVICE_CONSOLE, 17, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||||
#define IOCTL_CONDRV_CTRL_EVENT CTL_CODE(FILE_DEVICE_CONSOLE, 18, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
#define IOCTL_CONDRV_CTRL_EVENT CTL_CODE(FILE_DEVICE_CONSOLE, 18, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||||
#define IOCTL_CONDRV_BEEP CTL_CODE(FILE_DEVICE_CONSOLE, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
#define IOCTL_CONDRV_BEEP CTL_CODE(FILE_DEVICE_CONSOLE, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||||
|
#define IOCTL_CONDRV_FLUSH CTL_CODE(FILE_DEVICE_CONSOLE, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||||
|
|
||||||
/* console output ioctls */
|
/* console output ioctls */
|
||||||
#define IOCTL_CONDRV_WRITE_CONSOLE CTL_CODE(FILE_DEVICE_CONSOLE, 30, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
#define IOCTL_CONDRV_WRITE_CONSOLE CTL_CODE(FILE_DEVICE_CONSOLE, 30, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||||
|
|
|
@ -2321,8 +2321,8 @@ static NTSTATUS screen_buffer_ioctl( struct screen_buffer *screen_buffer, unsign
|
||||||
return scroll_output( screen_buffer, in_data );
|
return scroll_output( screen_buffer, in_data );
|
||||||
|
|
||||||
default:
|
default:
|
||||||
FIXME( "unsupported ioctl %x\n", code );
|
WARN( "invalid ioctl %x\n", code );
|
||||||
return STATUS_NOT_SUPPORTED;
|
return STATUS_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2439,6 +2439,12 @@ static NTSTATUS console_input_ioctl( struct console *console, unsigned int code,
|
||||||
}
|
}
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
|
||||||
|
case IOCTL_CONDRV_FLUSH:
|
||||||
|
if (in_size || *out_size) return STATUS_INVALID_PARAMETER;
|
||||||
|
TRACE( "flush\n" );
|
||||||
|
console->record_count = 0;
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
FIXME( "unsupported ioctl %x\n", code );
|
FIXME( "unsupported ioctl %x\n", code );
|
||||||
return STATUS_NOT_SUPPORTED;
|
return STATUS_NOT_SUPPORTED;
|
||||||
|
|
Loading…
Reference in New Issue