swc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/swc
Log | Files | Refs | README | LICENSE

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:
Mlibswc/bindings.c | 15++++++++++-----
Mlibswc/swc.h | 11++++++++---
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); /* }}} */