mirror of
https://github.com/libratbag/libratbag.git
synced 2026-11-07 23:23:52 +01:00
lur: change new_from_hidraw to return an errno
Makes debugging slightly more useful than just returning NULL. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
committed by
Benjamin Tissoires
parent
7704c102e4
commit
b3237fd001
12
src/liblur.c
12
src/liblur.c
@@ -24,6 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
@@ -141,13 +142,13 @@ hidpp10_init(int fd)
|
|||||||
HIDPP10_PROFILE_UNKNOWN);
|
HIDPP10_PROFILE_UNKNOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
_EXPORT_ struct lur_receiver*
|
_EXPORT_ int
|
||||||
lur_receiver_new_from_hidraw(int fd, void *userdata)
|
lur_receiver_new_from_hidraw(int fd, void *userdata, struct lur_receiver **out)
|
||||||
{
|
{
|
||||||
struct lur_receiver *receiver;
|
struct lur_receiver *receiver;
|
||||||
|
|
||||||
if (!hidraw_is_receiver(fd))
|
if (!hidraw_is_receiver(fd))
|
||||||
return NULL;
|
return -EINVAL;
|
||||||
|
|
||||||
receiver = zalloc(sizeof(*receiver));
|
receiver = zalloc(sizeof(*receiver));
|
||||||
receiver->refcount = 1;
|
receiver->refcount = 1;
|
||||||
@@ -159,11 +160,12 @@ lur_receiver_new_from_hidraw(int fd, void *userdata)
|
|||||||
if (!receiver->hidppdev)
|
if (!receiver->hidppdev)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
return receiver;
|
*out = receiver;
|
||||||
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
free(receiver);
|
free(receiver);
|
||||||
return NULL;
|
return -errno;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 fd An O_RDWR file descriptor pointing to a /dev/hidraw node
|
||||||
* @param userdata Caller-specific data
|
* @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*
|
int
|
||||||
lur_receiver_new_from_hidraw(int fd, void *userdata);
|
lur_receiver_new_from_hidraw(int fd, void *userdata, struct lur_receiver **lur);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enumerate devices currently paired with the given receiver.
|
* Enumerate devices currently paired with the given receiver.
|
||||||
|
|||||||
@@ -41,8 +41,9 @@ enum options {
|
|||||||
static struct lur_receiver *
|
static struct lur_receiver *
|
||||||
open_receiver(const char *path)
|
open_receiver(const char *path)
|
||||||
{
|
{
|
||||||
struct lur_receiver *receiver;
|
struct lur_receiver *receiver = NULL;
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
|
int rc;
|
||||||
|
|
||||||
fd = open(path, O_RDWR);
|
fd = open(path, O_RDWR);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
@@ -50,8 +51,8 @@ open_receiver(const char *path)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
receiver = lur_receiver_new_from_hidraw(fd, NULL);
|
rc = lur_receiver_new_from_hidraw(fd, NULL, &receiver);
|
||||||
if (!receiver)
|
if (rc != 0)
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
return receiver;
|
return receiver;
|
||||||
|
|||||||
Reference in New Issue
Block a user