mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-11-13 13:29:47 -05:00
Return the closure from wl_connection_vmarshal()
And provide a function to write it to a connection.
This commit is contained in:
parent
50038e4757
commit
6bce89da78
4 changed files with 35 additions and 13 deletions
16
connection.c
16
connection.c
|
|
@ -52,6 +52,7 @@ struct wl_closure {
|
|||
ffi_cif cif;
|
||||
void *args[20];
|
||||
uint32_t buffer[64];
|
||||
uint32_t *start;
|
||||
};
|
||||
|
||||
struct wl_connection {
|
||||
|
|
@ -357,7 +358,7 @@ wl_message_size_extra(const struct wl_message *message)
|
|||
return extra;
|
||||
}
|
||||
|
||||
void
|
||||
struct wl_closure *
|
||||
wl_connection_vmarshal(struct wl_connection *connection,
|
||||
struct wl_object *sender,
|
||||
uint32_t opcode, va_list ap,
|
||||
|
|
@ -466,7 +467,9 @@ wl_connection_vmarshal(struct wl_connection *connection,
|
|||
size = (p - start) * sizeof *p;
|
||||
start[0] = sender->id;
|
||||
start[1] = opcode | (size << 16);
|
||||
wl_connection_write(connection, start, size);
|
||||
closure->start = start;
|
||||
|
||||
return closure;
|
||||
}
|
||||
|
||||
struct wl_closure *
|
||||
|
|
@ -651,6 +654,15 @@ wl_closure_invoke(struct wl_closure *closure,
|
|||
ffi_call(&closure->cif, func, &result, closure->args);
|
||||
}
|
||||
|
||||
void
|
||||
wl_closure_send(struct wl_closure *closure, struct wl_connection *connection)
|
||||
{
|
||||
uint32_t size;
|
||||
|
||||
size = closure->start[1] >> 16;
|
||||
wl_connection_write(connection, closure->start, size);
|
||||
}
|
||||
|
||||
void
|
||||
wl_closure_print(struct wl_closure *closure, struct wl_object *target)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue