From b3237fd00140cbe0ff61d55d8a5a969e0ff147be Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 2 Mar 2016 14:00:58 +1000 Subject: [PATCH] lur: change new_from_hidraw to return an errno Makes debugging slightly more useful than just returning NULL. Signed-off-by: Peter Hutterer --- src/liblur.c | 12 +++++++----- src/liblur.h | 8 +++++--- tools/lur-command.c | 7 ++++--- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/liblur.c b/src/liblur.c index 94ea3ae1..e2149ce8 100644 --- a/src/liblur.c +++ b/src/liblur.c @@ -24,6 +24,7 @@ */ #include +#include #include #include #include @@ -141,13 +142,13 @@ hidpp10_init(int fd) HIDPP10_PROFILE_UNKNOWN); } -_EXPORT_ struct lur_receiver* -lur_receiver_new_from_hidraw(int fd, void *userdata) +_EXPORT_ int +lur_receiver_new_from_hidraw(int fd, void *userdata, struct lur_receiver **out) { struct lur_receiver *receiver; if (!hidraw_is_receiver(fd)) - return NULL; + return -EINVAL; receiver = zalloc(sizeof(*receiver)); receiver->refcount = 1; @@ -159,11 +160,12 @@ lur_receiver_new_from_hidraw(int fd, void *userdata) if (!receiver->hidppdev) goto error; - return receiver; + *out = receiver; + return 0; error: free(receiver); - return NULL; + return -errno; } diff --git a/src/liblur.h b/src/liblur.h index bf87341e..cb97bc1a 100644 --- a/src/liblur.h +++ b/src/liblur.h @@ -107,11 +107,13 @@ lur_is_receiver(uint16_t vid, uint16_t pid); * * @param fd An O_RDWR file descriptor pointing to a /dev/hidraw node * @param userdata Caller-specific data + * @param lur Set to the lur object on success, otherwise unmodified * - * @return A lur object, or NULL on error. + * @return 0 on success or a negative errno on error + * @retval -EINVAL The fd does not point to a lur receiver */ -struct lur_receiver* -lur_receiver_new_from_hidraw(int fd, void *userdata); +int +lur_receiver_new_from_hidraw(int fd, void *userdata, struct lur_receiver **lur); /** * Enumerate devices currently paired with the given receiver. diff --git a/tools/lur-command.c b/tools/lur-command.c index 40abce47..d080fd17 100644 --- a/tools/lur-command.c +++ b/tools/lur-command.c @@ -41,8 +41,9 @@ enum options { static struct lur_receiver * open_receiver(const char *path) { - struct lur_receiver *receiver; + struct lur_receiver *receiver = NULL; int fd = -1; + int rc; fd = open(path, O_RDWR); if (fd < 0) { @@ -50,8 +51,8 @@ open_receiver(const char *path) return NULL; } - receiver = lur_receiver_new_from_hidraw(fd, NULL); - if (!receiver) + rc = lur_receiver_new_from_hidraw(fd, NULL, &receiver); + if (rc != 0) close(fd); return receiver;