aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreri <eri@inventati.org>2023-10-19 18:04:59 +0200
committereri <eri@inventati.org>2023-10-19 18:19:38 +0200
commitc46d3da97685fb5314948f9467d3627671e83738 (patch)
treee54d31f69959fc5668fa68ad4066d63f513088fa
parent8ccbe45143eff1705c0516bcdb02376d7d627198 (diff)
drm: convert to try_from
References: wlroots/wlroots#884
-rw-r--r--include/wlr/types/wlr_drm.h4
-rw-r--r--types/wlr_drm.c16
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,
};