From 67fd06c6bf6a9657cba482b88d7647ba88d2faf0 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Fri, 14 Aug 2015 16:30:10 -0400 Subject: [PATCH] Add ratbag_get_name to retrieve the name of the device Signed-off-by: Benjamin Tissoires # Conflicts: # src/libratbag-private.h # src/libratbag.c --- src/libratbag-private.h | 1 + src/libratbag.c | 22 ++++++++++++++++++++++ src/libratbag.h | 9 +++++++++ src/libratbag.sym | 1 + 4 files changed, 33 insertions(+) diff --git a/src/libratbag-private.h b/src/libratbag-private.h index 38990e56..c405fd46 100644 --- a/src/libratbag-private.h +++ b/src/libratbag-private.h @@ -40,6 +40,7 @@ struct ratbag_driver; struct ratbag { + char *name; int evdev_fd; int refcount; struct ratbag_driver *driver; diff --git a/src/libratbag.c b/src/libratbag.c index aa60573f..979e84c4 100644 --- a/src/libratbag.c +++ b/src/libratbag.c @@ -127,6 +127,7 @@ ratbag_new_from_fd(struct libratbag *libratbag, int fd) struct input_id ids; struct ratbag *ratbag = NULL; struct ratbag_driver *driver; + char buf[256]; if (!libratbag) { fprintf(stderr, "libratbag is NULL\n"); @@ -141,6 +142,18 @@ ratbag_new_from_fd(struct libratbag *libratbag, int fd) if (rc < 0) goto out_err; + memset(buf, 0, sizeof(buf)); + rc = ioctl(fd, EVIOCGNAME(sizeof(buf) - 1), buf); + if (rc < 0) + goto out_err; + + free(ratbag->name); + ratbag->name = strdup(buf); + if (!ratbag->name) { + errno = ENOMEM; + goto out_err; + } + ratbag_device_init(ratbag, fd); driver = ratbag_find_driver(libratbag, &ids); @@ -154,6 +167,8 @@ ratbag_new_from_fd(struct libratbag *libratbag, int fd) return ratbag; out_err: + if (ratbag) + free(ratbag->name); free(ratbag); return NULL; } @@ -169,10 +184,17 @@ ratbag_unref(struct ratbag *ratbag) if (ratbag->refcount > 0) return ratbag; + free(ratbag->name); free(ratbag); return NULL; } +LIBRATBAG_EXPORT const char * +ratbag_get_name(const struct ratbag* ratbag) +{ + return ratbag->name; +} + static void ratbag_register_driver(struct libratbag *libratbag, struct ratbag_driver *driver) { diff --git a/src/libratbag.h b/src/libratbag.h index e8ce75be..5cfc31f0 100644 --- a/src/libratbag.h +++ b/src/libratbag.h @@ -175,6 +175,15 @@ libratbag_unref(struct libratbag *libratbag); struct ratbag* ratbag_new_from_fd(struct libratbag *libratbag, int fd); +/** + * @ingroup base + * + * @param ratbag A previously initialized ratbag context + * @return The name of the device associated with the given ratbag. + */ +const char * +ratbag_get_name(const struct ratbag* ratbag); + /** * @ingroup device */ diff --git a/src/libratbag.sym b/src/libratbag.sym index 678a5b5a..2d892fe7 100644 --- a/src/libratbag.sym +++ b/src/libratbag.sym @@ -5,6 +5,7 @@ global: libratbag_create_context; libratbag_ref; libratbag_unref; + ratbag_get_name; ratbag_new_from_fd; ratbag_unref; local: