From 79cb33e192be9b41d9d077564b0197b53c1a228c Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 22 Sep 2020 16:47:10 +0200 Subject: [PATCH] server: Remove support for creating bare consoles. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- include/wine/server_protocol.h | 6 +- programs/wineconsole/wineconsole.c | 2 - server/console.c | 89 +++++------------------------- server/protocol.def | 2 - server/request.h | 4 +- server/trace.c | 2 - 6 files changed, 18 insertions(+), 87 deletions(-) diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 40c86791cc4..3474a0244f6 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -1807,8 +1807,6 @@ struct alloc_console_request unsigned int access; unsigned int attributes; process_id_t pid; - int input_fd; - char __pad_28[4]; }; struct alloc_console_reply { @@ -1882,7 +1880,7 @@ struct create_console_output_request unsigned int access; unsigned int attributes; unsigned int share; - int fd; + char __pad_28[4]; }; struct create_console_output_reply { @@ -6283,7 +6281,7 @@ union generic_reply /* ### protocol_version begin ### */ -#define SERVER_PROTOCOL_VERSION 644 +#define SERVER_PROTOCOL_VERSION 645 /* ### protocol_version end ### */ diff --git a/programs/wineconsole/wineconsole.c b/programs/wineconsole/wineconsole.c index f076eb21e43..415350fb404 100644 --- a/programs/wineconsole/wineconsole.c +++ b/programs/wineconsole/wineconsole.c @@ -685,7 +685,6 @@ static struct inner_data* WINECON_Init(HINSTANCE hInst, DWORD pid, LPCWSTR appna req->access = GENERIC_READ | GENERIC_WRITE; req->attributes = 0; req->pid = pid; - req->input_fd = -1; ret = !wine_server_call_err( req ); con_in = wine_server_ptr_handle( reply->handle_in ); @@ -711,7 +710,6 @@ static struct inner_data* WINECON_Init(HINSTANCE hInst, DWORD pid, LPCWSTR appna req->access = GENERIC_WRITE|GENERIC_READ; req->attributes = 0; req->share = FILE_SHARE_READ|FILE_SHARE_WRITE; - req->fd = -1; ret = !wine_server_call_err( req ); con_out = wine_server_ptr_handle( reply->handle_out ); } diff --git a/server/console.c b/server/console.c index c2dcd50dd83..4ed14a2d3f5 100644 --- a/server/console.c +++ b/server/console.c @@ -569,15 +569,13 @@ static struct object *create_console_input_events(void) return &evt->obj; } -static struct object *create_console_input( int fd ) +static struct object *create_console_input(void) { struct console_input *console_input; if (!(console_input = alloc_object( &console_input_ops ))) - { - if (fd != -1) close( fd ); return NULL; - } + console_input->renderer = NULL; console_input->mode = ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_MOUSE_INPUT | ENABLE_INSERT_MODE | @@ -606,21 +604,13 @@ static struct object *create_console_input( int fd ) if (!console_input->history || !console_input->event) { - if (fd != -1) close( fd ); console_input->history_size = 0; release_object( console_input ); return NULL; } - if (fd != -1) /* bare console */ - { - console_input->fd = create_anonymous_fd( &console_input_fd_ops, fd, &console_input->obj, - FILE_SYNCHRONOUS_IO_NONALERT ); - } - else - { - console_input->fd = alloc_pseudo_fd( &console_input_fd_ops, &console_input->obj, - FILE_SYNCHRONOUS_IO_NONALERT ); - } + + console_input->fd = alloc_pseudo_fd( &console_input_fd_ops, &console_input->obj, + FILE_SYNCHRONOUS_IO_NONALERT ); if (!console_input->fd) { release_object( console_input ); @@ -730,7 +720,7 @@ static void set_active_screen_buffer( struct console_input *console_input, struc console_input_events_append( console_input, &evt ); } -static struct object *create_console_output( struct console_input *console_input, int fd ) +static struct object *create_console_output( struct console_input *console_input ) { struct screen_buffer *screen_buffer; int i; @@ -742,10 +732,8 @@ static struct object *create_console_output( struct console_input *console_input } if (!(screen_buffer = alloc_object( &screen_buffer_ops ))) - { - if (fd != -1) close( fd ); return NULL; - } + screen_buffer->id = ++console_input->last_id; screen_buffer->mode = ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT; screen_buffer->input = console_input; @@ -774,12 +762,8 @@ static struct object *create_console_output( struct console_input *console_input init_async_queue( &screen_buffer->ioctl_q ); list_add_head( &screen_buffer_list, &screen_buffer->entry ); - if (fd != -1) - screen_buffer->fd = create_anonymous_fd( &screen_buffer_fd_ops, fd, &screen_buffer->obj, - FILE_SYNCHRONOUS_IO_NONALERT ); - else - screen_buffer->fd = alloc_pseudo_fd( &screen_buffer_fd_ops, &screen_buffer->obj, - FILE_SYNCHRONOUS_IO_NONALERT ); + screen_buffer->fd = alloc_pseudo_fd( &screen_buffer_fd_ops, &screen_buffer->obj, + FILE_SYNCHRONOUS_IO_NONALERT ); if (!screen_buffer->fd) { release_object( screen_buffer ); @@ -1746,8 +1730,8 @@ static struct object *console_server_lookup_name( struct object *obj, struct uni set_error( STATUS_INVALID_HANDLE ); return 0; } - if (!(server->console = (struct console_input *)create_console_input( -1 ))) return NULL; - if (!(screen_buffer = (struct screen_buffer *)create_console_output( server->console, -1 ))) + if (!(server->console = (struct console_input *)create_console_input())) return NULL; + if (!(screen_buffer = (struct screen_buffer *)create_console_output( server->console ))) { release_object( server->console ); server->console = NULL; @@ -2519,7 +2503,7 @@ static struct object *console_device_lookup_name( struct object *obj, struct uni return NULL; } name->len = 0; - return create_console_output( current->process->console, -1 ); + return create_console_output( current->process->console ); } if (name->len == sizeof(serverW) && !memcmp( name->str, serverW, name->len )) @@ -2566,52 +2550,29 @@ DECL_HANDLER(alloc_console) { struct process *process; struct console_input *console; - int fd; int attach = 0; - if (req->input_fd != -1) - { - if ((fd = thread_get_inflight_fd( current, req->input_fd )) == -1) - { - set_error( STATUS_INVALID_PARAMETER ); - return; - } - } - else fd = -1; - switch (req->pid) { case 0: /* console to be attached to parent process */ if (!(process = get_process_from_id( current->process->parent_id ))) { - if (fd != -1) close( fd ); set_error( STATUS_ACCESS_DENIED ); return; } attach = 1; break; - case 0xffffffff: - /* console to be attached to current process */ - process = current->process; - grab_object( process ); - attach = 1; - break; default: /* console to be attached to req->pid */ - if (!(process = get_process_from_id( req->pid ))) - { - if (fd != -1) close( fd ); - return; - } + if (!(process = get_process_from_id( req->pid ))) return; } if (attach && process->console) { - if (fd != -1) close( fd ); set_error( STATUS_ACCESS_DENIED ); } - else if ((console = (struct console_input*)create_console_input( fd ))) + else if ((console = (struct console_input*)create_console_input())) { if ((reply->handle_in = alloc_handle( current->process, console, req->access, req->attributes )) && attach) @@ -2655,31 +2616,11 @@ DECL_HANDLER(create_console_output) { struct console_input *console; struct object *screen_buffer; - int fd; - if (req->fd != -1) - { - if ((fd = thread_get_inflight_fd( current, req->fd )) == -1) - { - set_error( STATUS_INVALID_HANDLE ); - return; - } - } - else fd = -1; if (!(console = console_input_get( req->handle_in, FILE_WRITE_PROPERTIES ))) - { - if (fd != -1) close( fd ); return; - } - if (console_input_is_bare( console ) ^ (fd != -1)) - { - if (fd != -1) close( fd ); - release_object( console ); - set_error( STATUS_INVALID_HANDLE ); - return; - } - screen_buffer = create_console_output( console, fd ); + screen_buffer = create_console_output( console ); if (screen_buffer) { /* FIXME: should store sharing and test it when opening the CONOUT$ device diff --git a/server/protocol.def b/server/protocol.def index ed8b10ce778..ea23b36da12 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -1450,7 +1450,6 @@ enum server_fd_type unsigned int access; /* wanted access rights */ unsigned int attributes; /* object attributes */ process_id_t pid; /* pid of process which shall be attached to the console */ - int input_fd; /* if pid=-1 (bare console to current process), fd for input */ @REPLY obj_handle_t handle_in; /* handle to console input */ @END @@ -1492,7 +1491,6 @@ enum server_fd_type unsigned int access; /* wanted access rights */ unsigned int attributes; /* object attributes */ unsigned int share; /* sharing credentials */ - int fd; /* for bare consoles, fd the screen-buffer is attached to */ @REPLY obj_handle_t handle_out; /* handle to the screen buffer */ @END diff --git a/server/request.h b/server/request.h index 0982e919903..a70eed126e6 100644 --- a/server/request.h +++ b/server/request.h @@ -1091,8 +1091,7 @@ C_ASSERT( sizeof(struct set_socket_deferred_request) == 24 ); C_ASSERT( FIELD_OFFSET(struct alloc_console_request, access) == 12 ); C_ASSERT( FIELD_OFFSET(struct alloc_console_request, attributes) == 16 ); C_ASSERT( FIELD_OFFSET(struct alloc_console_request, pid) == 20 ); -C_ASSERT( FIELD_OFFSET(struct alloc_console_request, input_fd) == 24 ); -C_ASSERT( sizeof(struct alloc_console_request) == 32 ); +C_ASSERT( sizeof(struct alloc_console_request) == 24 ); C_ASSERT( FIELD_OFFSET(struct alloc_console_reply, handle_in) == 8 ); C_ASSERT( sizeof(struct alloc_console_reply) == 16 ); C_ASSERT( sizeof(struct free_console_request) == 16 ); @@ -1111,7 +1110,6 @@ C_ASSERT( FIELD_OFFSET(struct create_console_output_request, handle_in) == 12 ); C_ASSERT( FIELD_OFFSET(struct create_console_output_request, access) == 16 ); C_ASSERT( FIELD_OFFSET(struct create_console_output_request, attributes) == 20 ); C_ASSERT( FIELD_OFFSET(struct create_console_output_request, share) == 24 ); -C_ASSERT( FIELD_OFFSET(struct create_console_output_request, fd) == 28 ); C_ASSERT( sizeof(struct create_console_output_request) == 32 ); C_ASSERT( FIELD_OFFSET(struct create_console_output_reply, handle_out) == 8 ); C_ASSERT( sizeof(struct create_console_output_reply) == 16 ); diff --git a/server/trace.c b/server/trace.c index be65fe3d663..f217bb1fa90 100644 --- a/server/trace.c +++ b/server/trace.c @@ -2020,7 +2020,6 @@ static void dump_alloc_console_request( const struct alloc_console_request *req fprintf( stderr, " access=%08x", req->access ); fprintf( stderr, ", attributes=%08x", req->attributes ); fprintf( stderr, ", pid=%04x", req->pid ); - fprintf( stderr, ", input_fd=%d", req->input_fd ); } static void dump_alloc_console_reply( const struct alloc_console_reply *req ) @@ -2066,7 +2065,6 @@ static void dump_create_console_output_request( const struct create_console_outp fprintf( stderr, ", access=%08x", req->access ); fprintf( stderr, ", attributes=%08x", req->attributes ); fprintf( stderr, ", share=%08x", req->share ); - fprintf( stderr, ", fd=%d", req->fd ); } static void dump_create_console_output_reply( const struct create_console_output_reply *req )