summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/evdev.c49
1 files changed, 26 insertions, 23 deletions
diff --git a/src/evdev.c b/src/evdev.c
index 94bf3604..908a8bad 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1447,6 +1447,29 @@ evdev_notify_added_device(struct evdev_device *device)
notify_added_device(&device->base);
}
+static int
+evdev_device_compare_syspath(struct udev_device *udev_device, int fd)
+{
+ struct udev *udev = udev_device_get_udev(udev_device);
+ struct udev_device *udev_device_new;
+ struct stat st;
+ int rc = 1;
+
+ if (fstat(fd, &st) < 0)
+ goto out;
+
+ udev_device_new = udev_device_new_from_devnum(udev, 'c', st.st_rdev);
+ if (!udev_device_new)
+ goto out;
+
+ rc = strcmp(udev_device_get_syspath(udev_device_new),
+ udev_device_get_syspath(udev_device));
+out:
+ if (udev_device_new)
+ udev_device_unref(udev_device_new);
+ return rc;
+}
+
struct evdev_device *
evdev_device_create(struct libinput_seat *seat,
struct udev_device *udev_device)
@@ -1469,6 +1492,9 @@ evdev_device_create(struct libinput_seat *seat,
return NULL;
}
+ if (evdev_device_compare_syspath(udev_device, fd) != 0)
+ goto err;
+
device = zalloc(sizeof *device);
if (device == NULL)
goto err;
@@ -1907,29 +1933,6 @@ evdev_device_suspend(struct evdev_device *device)
return 0;
}
-static int
-evdev_device_compare_syspath(struct udev_device *udev_device, int fd)
-{
- struct udev *udev = udev_device_get_udev(udev_device);
- struct udev_device *udev_device_new;
- struct stat st;
- int rc = 1;
-
- if (fstat(fd, &st) < 0)
- goto out;
-
- udev_device_new = udev_device_new_from_devnum(udev, 'c', st.st_rdev);
- if (!udev_device_new)
- goto out;
-
- rc = strcmp(udev_device_get_syspath(udev_device_new),
- udev_device_get_syspath(udev_device));
-out:
- if (udev_device_new)
- udev_device_unref(udev_device_new);
- return rc;
-}
-
int
evdev_device_resume(struct evdev_device *device)
{