From 5fbc9daa409371d15ffb9012cc21dddc934fad4a Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Tue, 24 Jan 2017 12:07:19 -0600 Subject: server: Refactor array send functions These have grown a little in size but are almost identical, factor out the common code. Signed-off-by: Derek Foreman Reviewed-by: Pekka Paalanen --- src/wayland-server.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/src/wayland-server.c b/src/wayland-server.c index ac634da..a981fda 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -168,9 +168,10 @@ log_closure(struct wl_resource *resource, } } -WL_EXPORT void -wl_resource_post_event_array(struct wl_resource *resource, uint32_t opcode, - union wl_argument *args) +static void +handle_array(struct wl_resource *resource, uint32_t opcode, + union wl_argument *args, + int (*send_func)(struct wl_closure *, struct wl_connection *)) { struct wl_closure *closure; struct wl_object *object = &resource->object; @@ -183,7 +184,7 @@ wl_resource_post_event_array(struct wl_resource *resource, uint32_t opcode, return; } - if (wl_closure_send(closure, resource->client->connection)) + if (send_func(closure, resource->client->connection)) resource->client->error = 1; log_closure(resource, closure, true); @@ -191,6 +192,13 @@ wl_resource_post_event_array(struct wl_resource *resource, uint32_t opcode, wl_closure_destroy(closure); } +WL_EXPORT void +wl_resource_post_event_array(struct wl_resource *resource, uint32_t opcode, + union wl_argument *args) +{ + handle_array(resource, opcode, args, wl_closure_send); +} + WL_EXPORT void wl_resource_post_event(struct wl_resource *resource, uint32_t opcode, ...) { @@ -211,23 +219,7 @@ WL_EXPORT void wl_resource_queue_event_array(struct wl_resource *resource, uint32_t opcode, union wl_argument *args) { - struct wl_closure *closure; - struct wl_object *object = &resource->object; - - closure = wl_closure_marshal(object, opcode, args, - &object->interface->events[opcode]); - - if (closure == NULL) { - resource->client->error = 1; - return; - } - - if (wl_closure_queue(closure, resource->client->connection)) - resource->client->error = 1; - - log_closure(resource, closure, true); - - wl_closure_destroy(closure); + handle_array(resource, opcode, args, wl_closure_queue); } WL_EXPORT void -- cgit v1.2.3