Module: wine Branch: master Commit: c4789b08f3bcc879d3a95b1023626a3e2a3a8967 URL: https://source.winehq.org/git/wine.git/?a=commit;h=c4789b08f3bcc879d3a95b102...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Jul 16 17:50:09 2020 +0200
server: Introduce IOCTL_CONDRV_ATTACH_RENDERER ioctl.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
include/wine/condrv.h | 4 ++++ server/console.c | 23 +++++++++++++++++++++++ server/trace.c | 1 + 3 files changed, 28 insertions(+)
diff --git a/include/wine/condrv.h b/include/wine/condrv.h index 606c171c01..80613d6b7f 100644 --- a/include/wine/condrv.h +++ b/include/wine/condrv.h @@ -41,6 +41,10 @@
/* console renderer ioctls */ #define IOCTL_CONDRV_GET_RENDERER_EVENTS CTL_CODE(FILE_DEVICE_CONSOLE, 70, METHOD_BUFFERED, FILE_READ_PROPERTIES) +#define IOCTL_CONDRV_ATTACH_RENDERER CTL_CODE(FILE_DEVICE_CONSOLE, 71, METHOD_BUFFERED, FILE_READ_PROPERTIES) + +/* console handle type */ +typedef unsigned int condrv_handle_t;
/* structure for console char/attribute info */ typedef struct diff --git a/server/console.c b/server/console.c index 345dd9b4e5..f56d4ba380 100644 --- a/server/console.c +++ b/server/console.c @@ -1732,6 +1732,29 @@ static int console_input_events_ioctl( struct fd *fd, ioctl_code_t code, struct queue_async( &evts->read_q, async ); return 1;
+ case IOCTL_CONDRV_ATTACH_RENDERER: + { + struct console_input *console_input; + if (get_req_data_size() != sizeof(condrv_handle_t)) + { + set_error( STATUS_INVALID_PARAMETER ); + return 0; + } + console_input = (struct console_input *)get_handle_obj( current->process, *(condrv_handle_t *)get_req_data(), + 0, &console_input_ops ); + if (!console_input) return 0; + + if (!console_input->evt) + { + console_input->evt = (struct console_input_events *)grab_object( evts ); + console_input->renderer = current; + } + else set_error( STATUS_INVALID_HANDLE ); + + release_object( console_input ); + return !get_error(); + } + default: set_error( STATUS_INVALID_HANDLE ); return 0; diff --git a/server/trace.c b/server/trace.c index 585ac50a0f..a2ee9c10b7 100644 --- a/server/trace.c +++ b/server/trace.c @@ -114,6 +114,7 @@ static void dump_ioctl_code( const char *prefix, const ioctl_code_t *code ) switch(*code) { #define CASE(c) case c: fprintf( stderr, "%s%s", prefix, #c ); break + CASE(IOCTL_CONDRV_ATTACH_RENDERER); CASE(IOCTL_CONDRV_FILL_OUTPUT); CASE(IOCTL_CONDRV_GET_INPUT_INFO); CASE(IOCTL_CONDRV_GET_MODE);