struct wlegl_handle * wlegl_handle_create(struct wl_resource *parent, uint32_t id, int32_t num_fds, struct wl_array *ints) { struct wlegl_handle *handle; handle = malloc(sizeof *handle); if (!handle) { wl_resource_post_no_memory(parent); return; } memset(handle, 0, sizeof *handle); handle->resource = wl_resource_create(wl_resource_get_client(parent), &android_wlegl_handle_interface, 1, id); if (!handle->resource) { wl_resource_post_no_memory(parent); free(handle); return; } wl_resource_set_implementation(handle->resource, &wlegl_handle_implementation, handle, destroy_wlegl_handle); wl_array_init(&handle->ints); wl_array_init(&handle->fds); wl_array_copy(&handle->ints, ints); handle->num_fds = num_fds; handle->num_ints = ints->size / sizeof(int); }
static void server_wlegl_create_handle(struct wl_client *client, struct wl_resource *resource, uint32_t id, int32_t num_fds, struct wl_array *ints) { server_wlegl *wlegl = server_wlegl_from(resource); server_wlegl_handle *handle; if (num_fds < 0) { wl_resource_post_error(resource, ANDROID_WLEGL_ERROR_BAD_VALUE, "num_fds is negative: %d", num_fds); return; } handle = server_wlegl_handle_create(id); wl_array_copy(&handle->ints, ints); handle->num_fds = num_fds; wl_client_add_resource(client, &handle->resource); }
static void ssb_ints(void *data, android_wlegl_server_buffer_handle *, wl_array *ints) { ServerWaylandBuffer *wsb = static_cast<ServerWaylandBuffer *>(data); wl_array_copy(&wsb->ints, ints); }