summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libevdev/libevdev-uinput.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/libevdev/libevdev-uinput.c b/libevdev/libevdev-uinput.c
index afebc0b..af98fa4 100644
--- a/libevdev/libevdev-uinput.c
+++ b/libevdev/libevdev-uinput.c
@@ -226,11 +226,16 @@ fetch_syspath_and_devnode(struct libevdev_uinput *uinput_dev)
buf[len - 1] = '\0'; /* file contains \n */
if (strcmp(buf, uinput_dev->name) == 0) {
- strcpy(buf, SYS_INPUT_DIR);
- strcat(buf, namelist[i]->d_name);
- uinput_dev->syspath = strdup(buf);
- uinput_dev->devnode = fetch_device_node(buf);
- break;
+ if (uinput_dev->syspath) {
+ /* FIXME: could descend into bit comparison here */
+ log_info("multiple identical devices found. syspath is unreliable\n");
+ break;
+ } else {
+ strcpy(buf, SYS_INPUT_DIR);
+ strcat(buf, namelist[i]->d_name);
+ uinput_dev->syspath = strdup(buf);
+ uinput_dev->devnode = fetch_device_node(buf);
+ }
}
}