forked from Mirrors/wine-wine
Convert user handles received from client to full handles.
parent
cf07d8bf73
commit
bc878ef4d9
|
@ -723,7 +723,7 @@ DECL_HANDLER(send_message)
|
||||||
if ((msg = mem_alloc( sizeof(*msg) )))
|
if ((msg = mem_alloc( sizeof(*msg) )))
|
||||||
{
|
{
|
||||||
msg->type = req->type;
|
msg->type = req->type;
|
||||||
msg->win = req->win;
|
msg->win = get_user_full_handle( req->win );
|
||||||
msg->msg = req->msg;
|
msg->msg = req->msg;
|
||||||
msg->wparam = req->wparam;
|
msg->wparam = req->wparam;
|
||||||
msg->lparam = req->lparam;
|
msg->lparam = req->lparam;
|
||||||
|
@ -848,6 +848,7 @@ DECL_HANDLER(get_message)
|
||||||
struct timer *timer;
|
struct timer *timer;
|
||||||
struct message *msg;
|
struct message *msg;
|
||||||
struct msg_queue *queue = get_current_queue();
|
struct msg_queue *queue = get_current_queue();
|
||||||
|
user_handle_t get_win = get_user_full_handle( req->get_win );
|
||||||
|
|
||||||
if (!queue)
|
if (!queue)
|
||||||
{
|
{
|
||||||
|
@ -874,7 +875,7 @@ DECL_HANDLER(get_message)
|
||||||
queue->changed_bits = 0;
|
queue->changed_bits = 0;
|
||||||
|
|
||||||
/* then check for posted messages */
|
/* then check for posted messages */
|
||||||
if ((msg = find_matching_message( &queue->msg_list[POST_MESSAGE], req->get_win,
|
if ((msg = find_matching_message( &queue->msg_list[POST_MESSAGE], get_win,
|
||||||
req->get_first, req->get_last )))
|
req->get_first, req->get_last )))
|
||||||
{
|
{
|
||||||
return_message_to_app( queue, req, msg, POST_MESSAGE );
|
return_message_to_app( queue, req, msg, POST_MESSAGE );
|
||||||
|
@ -882,7 +883,7 @@ DECL_HANDLER(get_message)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* then check for cooked hardware messages */
|
/* then check for cooked hardware messages */
|
||||||
if ((msg = find_matching_message( &queue->msg_list[COOKED_HW_MESSAGE], req->get_win,
|
if ((msg = find_matching_message( &queue->msg_list[COOKED_HW_MESSAGE], get_win,
|
||||||
req->get_first, req->get_last )))
|
req->get_first, req->get_last )))
|
||||||
{
|
{
|
||||||
return_message_to_app( queue, req, msg, COOKED_HW_MESSAGE );
|
return_message_to_app( queue, req, msg, COOKED_HW_MESSAGE );
|
||||||
|
@ -913,7 +914,7 @@ DECL_HANDLER(get_message)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now check for timer */
|
/* now check for timer */
|
||||||
if ((timer = find_expired_timer( queue, req->get_win, req->get_first,
|
if ((timer = find_expired_timer( queue, get_win, req->get_first,
|
||||||
req->get_last, (req->flags & GET_MSG_REMOVE) )))
|
req->get_last, (req->flags & GET_MSG_REMOVE) )))
|
||||||
{
|
{
|
||||||
req->type = MSG_POSTED;
|
req->type = MSG_POSTED;
|
||||||
|
@ -987,7 +988,7 @@ DECL_HANDLER(get_message_reply)
|
||||||
/* cleanup a queue when a window is deleted */
|
/* cleanup a queue when a window is deleted */
|
||||||
DECL_HANDLER(cleanup_window_queue)
|
DECL_HANDLER(cleanup_window_queue)
|
||||||
{
|
{
|
||||||
queue_cleanup_window( current, req->win );
|
queue_cleanup_window( current, get_user_full_handle(req->win) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -996,15 +997,16 @@ DECL_HANDLER(set_win_timer)
|
||||||
{
|
{
|
||||||
struct timer *timer;
|
struct timer *timer;
|
||||||
struct msg_queue *queue = get_current_queue();
|
struct msg_queue *queue = get_current_queue();
|
||||||
|
user_handle_t win = get_user_full_handle( req->win );
|
||||||
|
|
||||||
if (!queue) return;
|
if (!queue) return;
|
||||||
|
|
||||||
/* remove it if it existed already */
|
/* remove it if it existed already */
|
||||||
if (req->win) kill_timer( queue, req->win, req->msg, req->id );
|
if (win) kill_timer( queue, win, req->msg, req->id );
|
||||||
|
|
||||||
if ((timer = set_timer( queue, req->rate )))
|
if ((timer = set_timer( queue, req->rate )))
|
||||||
{
|
{
|
||||||
timer->win = req->win;
|
timer->win = win;
|
||||||
timer->msg = req->msg;
|
timer->msg = req->msg;
|
||||||
timer->id = req->id;
|
timer->id = req->id;
|
||||||
timer->lparam = req->lparam;
|
timer->lparam = req->lparam;
|
||||||
|
@ -1016,6 +1018,6 @@ DECL_HANDLER(kill_win_timer)
|
||||||
{
|
{
|
||||||
struct msg_queue *queue = current->queue;
|
struct msg_queue *queue = current->queue;
|
||||||
|
|
||||||
if (!queue || !kill_timer( queue, req->win, req->msg, req->id ))
|
if (!queue || !kill_timer( queue, get_user_full_handle(req->win), req->msg, req->id ))
|
||||||
set_error( STATUS_INVALID_PARAMETER );
|
set_error( STATUS_INVALID_PARAMETER );
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,8 @@ static int nb_handles;
|
||||||
static int allocated_handles;
|
static int allocated_handles;
|
||||||
|
|
||||||
#define FIRST_HANDLE 32 /* handle value for first table entry */
|
#define FIRST_HANDLE 32 /* handle value for first table entry */
|
||||||
#define MAX_HANDLES (65536-FIRST_HANDLE)
|
#define LAST_HANDLE (65536 - 16)
|
||||||
|
#define MAX_HANDLES (LAST_HANDLE - FIRST_HANDLE)
|
||||||
|
|
||||||
static struct user_handle *handle_to_entry( user_handle_t handle )
|
static struct user_handle *handle_to_entry( user_handle_t handle )
|
||||||
{
|
{
|
||||||
|
@ -98,6 +99,16 @@ void *get_user_object( user_handle_t handle, enum user_object type )
|
||||||
return entry->ptr;
|
return entry->ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* get the full handle for a possibly truncated handle */
|
||||||
|
user_handle_t get_user_full_handle( user_handle_t handle )
|
||||||
|
{
|
||||||
|
struct user_handle *entry;
|
||||||
|
|
||||||
|
if (handle >> 16) return handle;
|
||||||
|
if (!(entry = handle_to_entry( handle ))) return handle;
|
||||||
|
return entry_to_handle( entry );
|
||||||
|
}
|
||||||
|
|
||||||
/* same as get_user_object plus set the handle to the full 32-bit value */
|
/* same as get_user_object plus set the handle to the full 32-bit value */
|
||||||
void *get_user_object_handle( user_handle_t *handle, enum user_object type )
|
void *get_user_object_handle( user_handle_t *handle, enum user_object type )
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@ enum user_object
|
||||||
extern user_handle_t alloc_user_handle( void *ptr, enum user_object type );
|
extern user_handle_t alloc_user_handle( void *ptr, enum user_object type );
|
||||||
extern void *get_user_object( user_handle_t handle, enum user_object type );
|
extern void *get_user_object( user_handle_t handle, enum user_object type );
|
||||||
extern void *get_user_object_handle( user_handle_t *handle, enum user_object type );
|
extern void *get_user_object_handle( user_handle_t *handle, enum user_object type );
|
||||||
|
extern user_handle_t get_user_full_handle( user_handle_t handle );
|
||||||
extern void *free_user_handle( user_handle_t handle );
|
extern void *free_user_handle( user_handle_t handle );
|
||||||
extern void *next_user_handle( user_handle_t *handle, enum user_object type );
|
extern void *next_user_handle( user_handle_t *handle, enum user_object type );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue