Module: wine Branch: master Commit: 746ece1a086f8fb721766fc8a4677606e722e4c2 URL: https://source.winehq.org/git/wine.git/?a=commit;h=746ece1a086f8fb721766fc8a...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Oct 15 18:19:43 2020 +0200
server: Implement console input flush in server.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
server/console.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/server/console.c b/server/console.c index 8ac3a08abc7..d1e3cae8919 100644 --- a/server/console.c +++ b/server/console.c @@ -3,6 +3,7 @@ * * Copyright (C) 1998 Alexandre Julliard * 2001 Eric Pouech + * Copyright 2020 Jacek Caban for CodeWeavers * * * This library is free software; you can redistribute it and/or @@ -96,6 +97,7 @@ static const struct object_ops console_input_ops = };
static enum server_fd_type console_get_fd_type( struct fd *fd ); +static int console_input_flush( struct fd *fd, struct async *async ); static int console_input_ioctl( struct fd *fd, ioctl_code_t code, struct async *async );
static const struct fd_ops console_input_fd_ops = @@ -105,7 +107,7 @@ static const struct fd_ops console_input_fd_ops = console_get_fd_type, /* get_fd_type */ no_fd_read, /* read */ no_fd_write, /* write */ - no_fd_flush, /* flush */ + console_input_flush, /* flush */ no_fd_get_file_info, /* get_file_info */ no_fd_get_volume_info, /* get_volume_info */ console_input_ioctl, /* ioctl */ @@ -409,7 +411,7 @@ static int queue_host_ioctl( struct console_server *server, unsigned int code, u list_add_tail( &server->queue, &ioctl->entry ); wake_up( &server->obj, 0 ); if (async) set_error( STATUS_PENDING ); - return 0; + return 1; }
static void disconnect_console_server( struct console_server *server ) @@ -831,6 +833,18 @@ static int console_input_ioctl( struct fd *fd, ioctl_code_t code, struct async * } }
+static int console_input_flush( struct fd *fd, struct async *async ) +{ + struct console_input *console = get_fd_user( fd ); + + if (!console->server) + { + set_error( STATUS_INVALID_HANDLE ); + return 0; + } + return queue_host_ioctl( console->server, IOCTL_CONDRV_FLUSH, 0, NULL, NULL ); +} + static int screen_buffer_ioctl( struct fd *fd, ioctl_code_t code, struct async *async ) { struct screen_buffer *screen_buffer = get_fd_user( fd );