Module: wine Branch: master Commit: 52c04e1e390e0008580eca7343f5c04aed3d1323 URL: https://source.winehq.org/git/wine.git/?a=commit;h=52c04e1e390e0008580eca734...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Jun 25 22:26:54 2020 +0200
server: Support ConDrv/CurrentOut device.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
server/console.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/server/console.c b/server/console.c index a42bc4751e..57592e6ab0 100644 --- a/server/console.c +++ b/server/console.c @@ -173,6 +173,8 @@ struct screen_buffer static void screen_buffer_dump( struct object *obj, int verbose ); static void screen_buffer_destroy( struct object *obj ); static struct fd *screen_buffer_get_fd( struct object *obj ); +static struct object *screen_buffer_open_file( struct object *obj, unsigned int access, + unsigned int sharing, unsigned int options );
static const struct object_ops screen_buffer_ops = { @@ -191,7 +193,7 @@ static const struct object_ops screen_buffer_ops = no_lookup_name, /* lookup_name */ no_link_name, /* link_name */ NULL, /* unlink_name */ - no_open_file, /* open_file */ + screen_buffer_open_file, /* open_file */ no_kernel_obj_list, /* get_kernel_obj_list */ no_close_handle, /* close_handle */ screen_buffer_destroy /* destroy */ @@ -1247,6 +1249,12 @@ static void screen_buffer_destroy( struct object *obj ) free( screen_buffer->font.face_name ); }
+static struct object *screen_buffer_open_file( struct object *obj, unsigned int access, + unsigned int sharing, unsigned int options ) +{ + return grab_object( obj ); +} + static struct fd *screen_buffer_get_fd( struct object *obj ) { struct screen_buffer *screen_buffer = (struct screen_buffer*)obj; @@ -1493,6 +1501,7 @@ static struct object *console_device_lookup_name( struct object *obj, struct uni { static const WCHAR consoleW[] = {'C','o','n','s','o','l','e'}; static const WCHAR current_inW[] = {'C','u','r','r','e','n','t','I','n'}; + static const WCHAR current_outW[] = {'C','u','r','r','e','n','t','O','u','t'};
if (name->len == sizeof(current_inW) && !memcmp( name->str, current_inW, name->len )) { @@ -1505,6 +1514,17 @@ static struct object *console_device_lookup_name( struct object *obj, struct uni return grab_object( current->process->console ); }
+ if (name->len == sizeof(current_outW) && !memcmp( name->str, current_outW, name->len )) + { + if (!current->process->console || !current->process->console->active) + { + set_error( STATUS_INVALID_HANDLE ); + return NULL; + } + name->len = 0; + return grab_object( current->process->console->active ); + } + if (name->len == sizeof(consoleW) && !memcmp( name->str, consoleW, name->len )) { name->len = 0;