These have grown a little in size but are almost identical, factor
out the common code.

Signed-off-by: Derek Foreman <[email protected]>
---
 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 4360874..3f252aa 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -163,9 +163,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;
@@ -178,7 +179,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);
@@ -187,6 +188,13 @@ wl_resource_post_event_array(struct wl_resource *resource, 
uint32_t opcode,
 }
 
 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, ...)
 {
        union wl_argument args[WL_CLOSURE_MAX_ARGS];
@@ -206,23 +214,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
-- 
2.11.0

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to