From 1cbb80b7b4a655b0228f5359f3f182f47415636f Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Wed, 7 Oct 2015 18:46:15 -0400 Subject: [PATCH] keep track of opened devices If we want to remove the duplicate nodes opened when using ratbag_find_hidraw(), we need to somehow keep track of all opened ratbag_device. Signed-off-by: Benjamin Tissoires --- src/libratbag-private.h | 3 +++ src/libratbag.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/libratbag-private.h b/src/libratbag-private.h index 4ec1de3f..7b55b53d 100644 --- a/src/libratbag-private.h +++ b/src/libratbag-private.h @@ -50,6 +50,7 @@ struct ratbag { struct udev *udev; struct list drivers; + struct list devices; int refcount; ratbag_log_handler log_handler; @@ -74,6 +75,8 @@ struct ratbag_device { unsigned num_buttons; void *drv_data; + + struct list link; }; struct ratbag_id { diff --git a/src/libratbag.c b/src/libratbag.c index 0fb6f49b..f66a8b5c 100644 --- a/src/libratbag.c +++ b/src/libratbag.c @@ -172,6 +172,7 @@ ratbag_device_new(struct ratbag *ratbag, struct udev_device *udev_device, device->ids = *id; list_init(&device->profiles); + list_insert(&ratbag->devices, &device->link); return device; } @@ -196,6 +197,8 @@ ratbag_device_destroy(struct ratbag_device *device) if (device->udev_device) udev_device_unref(device->udev_device); + list_remove(&device->link); + ratbag_unref(device->ratbag); free(device->name); free(device); @@ -488,6 +491,7 @@ ratbag_create_context(const struct ratbag_interface *interface, ratbag->userdata = userdata; list_init(&ratbag->drivers); + list_init(&ratbag->devices); ratbag->udev = udev_new(); if (!ratbag->udev) { free(ratbag);