Jacek Caban : server: Introduce IOCTL_CONDRV_ATTACH_RENDERER ioctl.

Alexandre Julliard julliard at winehq.org
Thu Jul 16 19:01:23 CDT 2020


Module: wine
Branch: master
Commit: c4789b08f3bcc879d3a95b1023626a3e2a3a8967
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=c4789b08f3bcc879d3a95b1023626a3e2a3a8967

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jul 16 17:50:09 2020 +0200

server: Introduce IOCTL_CONDRV_ATTACH_RENDERER ioctl.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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);




More information about the wine-cvs mailing list