commit 892ffcbf9dd568e1d1dfa0c97364cd23225bfc99
parent bdd480cf591e9436f28b3405b7c832111d67a192
Author: Michael Forney <mforney@mforney.org>
Date: Sun, 3 Aug 2014 14:54:16 -0700
bindings: Handle failure in wl_array_add
Diffstat:
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/libswc/bindings.c b/libswc/bindings.c
@@ -29,6 +29,7 @@
#include "seat.h"
#include "util.h"
+#include <errno.h>
#include <wayland-util.h>
struct binding
@@ -161,9 +162,9 @@ void swc_bindings_finalize()
}
EXPORT
-void swc_add_binding(enum swc_binding_type type,
- uint32_t modifiers, uint32_t value,
- swc_binding_handler_t handler, void * data)
+int swc_add_binding(enum swc_binding_type type,
+ uint32_t modifiers, uint32_t value,
+ swc_binding_handler_t handler, void * data)
{
struct binding * binding;
struct wl_array * bindings;
@@ -177,13 +178,17 @@ void swc_add_binding(enum swc_binding_type type,
bindings = &button_bindings;
break;
default:
- return;
+ return -EINVAL;
}
- binding = wl_array_add(bindings, sizeof *binding);
+ if (!(binding = wl_array_add(bindings, sizeof *binding)))
+ return -ENOMEM;
+
binding->value = value;
binding->modifiers = modifiers;
binding->handler = handler;
binding->data = data;
+
+ return 0;
}
diff --git a/libswc/swc.h b/libswc/swc.h
@@ -231,9 +231,14 @@ enum swc_binding_type
typedef void (* swc_binding_handler_t)(void * data, uint32_t time,
uint32_t value, uint32_t state);
-void swc_add_binding(enum swc_binding_type type,
- uint32_t modifiers, uint32_t value,
- swc_binding_handler_t handler, void * data);
+/**
+ * Register a new input binding.
+ *
+ * Returns 0 on success, negative error code otherwise.
+ */
+int swc_add_binding(enum swc_binding_type type,
+ uint32_t modifiers, uint32_t value,
+ swc_binding_handler_t handler, void * data);
/* }}} */