diff options
author | eri <eri@inventati.org> | 2023-10-19 18:04:59 +0200 |
---|---|---|
committer | eri <eri@inventati.org> | 2023-10-19 18:19:38 +0200 |
commit | c46d3da97685fb5314948f9467d3627671e83738 (patch) | |
tree | e54d31f69959fc5668fa68ad4066d63f513088fa | |
parent | 8ccbe45143eff1705c0516bcdb02376d7d627198 (diff) |
drm: convert to try_from
References: wlroots/wlroots#884
-rw-r--r-- | include/wlr/types/wlr_drm.h | 4 | ||||
-rw-r--r-- | types/wlr_drm.c | 16 |
2 files changed, 11 insertions, 9 deletions
diff --git a/include/wlr/types/wlr_drm.h b/include/wlr/types/wlr_drm.h index da776fdb..d28c7b8f 100644 --- a/include/wlr/types/wlr_drm.h +++ b/include/wlr/types/wlr_drm.h @@ -45,9 +45,7 @@ struct wlr_drm { struct wl_listener display_destroy; }; -bool wlr_drm_buffer_is_resource(struct wl_resource *resource); - -struct wlr_drm_buffer *wlr_drm_buffer_from_resource( +struct wlr_drm_buffer *wlr_drm_buffer_try_from_resource( struct wl_resource *resource); struct wlr_drm *wlr_drm_create(struct wl_display *display, diff --git a/types/wlr_drm.c b/types/wlr_drm.c index 8a6521a1..a75f3042 100644 --- a/types/wlr_drm.c +++ b/types/wlr_drm.c @@ -55,19 +55,22 @@ static const struct wlr_buffer_impl buffer_impl = { .get_dmabuf = buffer_get_dmabuf, }; -bool wlr_drm_buffer_is_resource(struct wl_resource *resource) { +static bool buffer_resource_is_instance(struct wl_resource *resource) { return wl_resource_instance_of(resource, &wl_buffer_interface, &wl_buffer_impl); } -struct wlr_drm_buffer *wlr_drm_buffer_from_resource( +struct wlr_drm_buffer *wlr_drm_buffer_try_from_resource( struct wl_resource *resource) { - assert(wlr_drm_buffer_is_resource(resource)); + if (!buffer_resource_is_instance(resource)) { + return NULL; + } return wl_resource_get_user_data(resource); } static void buffer_handle_resource_destroy(struct wl_resource *resource) { - struct wlr_drm_buffer *buffer = wlr_drm_buffer_from_resource(resource); + struct wlr_drm_buffer *buffer = wlr_drm_buffer_try_from_resource(resource); + assert(buffer != NULL); buffer->resource = NULL; wlr_buffer_drop(&buffer->base); } @@ -170,13 +173,14 @@ static void drm_bind(struct wl_client *client, void *data, } static struct wlr_buffer *buffer_from_resource(struct wl_resource *resource) { - struct wlr_drm_buffer *buffer = wlr_drm_buffer_from_resource(resource); + struct wlr_drm_buffer *buffer = wlr_drm_buffer_try_from_resource(resource); + assert(buffer != NULL); return &buffer->base; } static const struct wlr_buffer_resource_interface buffer_resource_interface = { .name = "wlr_drm_buffer", - .is_instance = wlr_drm_buffer_is_resource, + .is_instance = buffer_resource_is_instance, .from_resource = buffer_from_resource, }; |