From 3188b97f9ca73a12dde3549fc82a8a025c0e931e Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Fri, 14 Aug 2015 16:10:57 -0400 Subject: [PATCH] Add implementation of ratbag_new_from_fd and ratbag_unref Signed-off-by: Benjamin Tissoires --- src/libratbag-private.h | 6 +++++ src/libratbag.c | 54 +++++++++++++++++++++++++++++++++++++++++ src/libratbag.sym | 2 ++ 3 files changed, 62 insertions(+) diff --git a/src/libratbag-private.h b/src/libratbag-private.h index 2069625f..d7eeb08e 100644 --- a/src/libratbag-private.h +++ b/src/libratbag-private.h @@ -25,6 +25,12 @@ #define LIBRATBAG_PRIVATE_H #include "libratbag.h" + +struct ratbag { + int evdev_fd; + int refcount; +}; + void ratbag_device_init(struct ratbag *rb, int fd); void diff --git a/src/libratbag.c b/src/libratbag.c index de3620f3..10e2a336 100644 --- a/src/libratbag.c +++ b/src/libratbag.c @@ -23,8 +23,11 @@ #include "config.h" #include +#include +#include #include #include +#include #include "libratbag-private.h" #include "libratbag-util.h" @@ -76,6 +79,57 @@ log_msg(struct libratbag *libratbag, va_end(args); } +void +ratbag_device_init(struct ratbag *rb, int fd) +{ + rb->evdev_fd = fd; + rb->refcount = 1; +} + +LIBRATBAG_EXPORT struct ratbag* +ratbag_new_from_fd(struct libratbag *libratbag, int fd) +{ + int rc; + struct input_id ids; + struct ratbag *ratbag = NULL; + + if (!libratbag) { + fprintf(stderr, "libratbag is NULL\n"); + return NULL; + } + + ratbag = zalloc(sizeof(*ratbag)); + if (!ratbag) + return NULL; + + rc = ioctl(fd, EVIOCGID, &ids); + if (rc < 0) + goto out_err; + + ratbag_device_init(ratbag, fd); + + return ratbag; + +out_err: + free(ratbag); + return NULL; +} + +LIBRATBAG_EXPORT struct ratbag * +ratbag_unref(struct ratbag *ratbag) +{ + if (ratbag == NULL) + return NULL; + + assert(ratbag->refcount > 0); + ratbag->refcount--; + if (ratbag->refcount > 0) + return ratbag; + + free(ratbag); + return NULL; +} + LIBRATBAG_EXPORT struct libratbag * libratbag_create_context(void) { diff --git a/src/libratbag.sym b/src/libratbag.sym index 870be011..678a5b5a 100644 --- a/src/libratbag.sym +++ b/src/libratbag.sym @@ -5,6 +5,8 @@ global: libratbag_create_context; libratbag_ref; libratbag_unref; + ratbag_new_from_fd; + ratbag_unref; local: *; };