[PATCH 06/12] [Server]: now report in get_console_mode request whether it's a bare console or not
Eric Pouech
eric.pouech at orange.fr
Sat Aug 28 06:15:14 CDT 2010
A+
---
include/wine/server_protocol.h | 2 +-
server/console.c | 15 +++++++++++++--
server/protocol.def | 1 +
server/request.h | 1 +
server/trace.c | 1 +
5 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h
index 5d117de..5f16f59 100644
--- a/include/wine/server_protocol.h
+++ b/include/wine/server_protocol.h
@@ -1534,7 +1534,7 @@ struct get_console_mode_reply
{
struct reply_header __header;
int mode;
- char __pad_12[4];
+ int is_bare;
};
diff --git a/server/console.c b/server/console.c
index 3f75cff..691c418 100644
--- a/server/console.c
+++ b/server/console.c
@@ -188,6 +188,11 @@ static struct list screen_buffer_list = LIST_INIT(screen_buffer_list);
static const char_info_t empty_char_info = { ' ', 0x000f }; /* white on black space */
+static int console_input_is_bare( struct console_input* cin )
+{
+ return cin->evt == NULL;
+}
+
static struct fd *console_input_get_fd( struct object* obj )
{
struct console_input *console_input = (struct console_input*)obj;
@@ -564,7 +569,7 @@ static void propagate_console_signal( struct console_input *console,
enum_processes(propagate_console_signal_cb, &csi);
}
-static int get_console_mode( obj_handle_t handle )
+static int get_console_mode( obj_handle_t handle, int *bare )
{
struct object *obj;
int ret = 0;
@@ -572,9 +577,15 @@ static int get_console_mode( obj_handle_t handle )
if ((obj = get_handle_obj( current->process, handle, FILE_READ_PROPERTIES, NULL )))
{
if (obj->ops == &console_input_ops)
+ {
ret = ((struct console_input *)obj)->mode;
+ *bare = console_input_is_bare((struct console_input *)obj);
+ }
else if (obj->ops == &screen_buffer_ops)
+ {
ret = ((struct screen_buffer *)obj)->mode;
+ *bare = console_input_is_bare(((struct screen_buffer *)obj)->input);
+ }
else
set_error( STATUS_OBJECT_TYPE_MISMATCH );
release_object( obj );
@@ -1524,7 +1535,7 @@ DECL_HANDLER(get_console_input_info)
/* get a console mode (input or output) */
DECL_HANDLER(get_console_mode)
{
- reply->mode = get_console_mode( req->handle );
+ reply->mode = get_console_mode( req->handle, &reply->is_bare );
}
/* set a console mode (input or output) */
diff --git a/server/protocol.def b/server/protocol.def
index fc85393..67863c1 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -1217,6 +1217,7 @@ struct console_renderer_event
obj_handle_t handle; /* handle to the console */
@REPLY
int mode; /* console mode */
+ int is_bare; /* whether the console has an evt_queue */
@END
diff --git a/server/request.h b/server/request.h
index e5b854a..efbe06f 100644
--- a/server/request.h
+++ b/server/request.h
@@ -971,6 +971,7 @@ C_ASSERT( sizeof(struct get_console_wait_event_reply) == 16 );
C_ASSERT( FIELD_OFFSET(struct get_console_mode_request, handle) == 12 );
C_ASSERT( sizeof(struct get_console_mode_request) == 16 );
C_ASSERT( FIELD_OFFSET(struct get_console_mode_reply, mode) == 8 );
+C_ASSERT( FIELD_OFFSET(struct get_console_mode_reply, is_bare) == 12 );
C_ASSERT( sizeof(struct get_console_mode_reply) == 16 );
C_ASSERT( FIELD_OFFSET(struct set_console_mode_request, handle) == 12 );
C_ASSERT( FIELD_OFFSET(struct set_console_mode_request, mode) == 16 );
diff --git a/server/trace.c b/server/trace.c
index ffec55f..8cdf279 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -1635,6 +1635,7 @@ static void dump_get_console_mode_request( const struct get_console_mode_request
static void dump_get_console_mode_reply( const struct get_console_mode_reply *req )
{
fprintf( stderr, " mode=%d", req->mode );
+ fprintf( stderr, ", is_bare=%d", req->is_bare );
}
static void dump_set_console_mode_request( const struct set_console_mode_request *req )
More information about the wine-patches
mailing list