From 2ff45c73a1ce5577a4a06cf255a394d3c93d0915 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 19 Jun 2014 14:10:13 +1000 Subject: uinput: use the UI_GET_SYSNAME ioctl if available Signed-off-by: Peter Hutterer Reviewed-by: Benjamin Tissoires --- libevdev/libevdev-uinput.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'libevdev/libevdev-uinput.c') diff --git a/libevdev/libevdev-uinput.c b/libevdev/libevdev-uinput.c index e0ae31e..f8607d1 100644 --- a/libevdev/libevdev-uinput.c +++ b/libevdev/libevdev-uinput.c @@ -198,8 +198,17 @@ fetch_syspath_and_devnode(struct libevdev_uinput *uinput_dev) { struct dirent **namelist; int ndev, i; - - /* FIXME: use new ioctl() here once kernel supports it */ + int rc; + char buf[sizeof(SYS_INPUT_DIR) + 64] = SYS_INPUT_DIR; + + rc = ioctl(uinput_dev->fd, + UI_GET_SYSNAME(sizeof(buf) - strlen(SYS_INPUT_DIR)), + &buf[strlen(SYS_INPUT_DIR)]); + if (rc != -1) { + uinput_dev->syspath = strdup(buf); + uinput_dev->devnode = fetch_device_node(buf); + return 0; + } ndev = scandir(SYS_INPUT_DIR, &namelist, is_input_device, alphasort); if (ndev <= 0) @@ -207,7 +216,6 @@ fetch_syspath_and_devnode(struct libevdev_uinput *uinput_dev) for (i = 0; i < ndev; i++) { int fd, len; - char buf[sizeof(SYS_INPUT_DIR) + 64]; struct stat st; strcpy(buf, SYS_INPUT_DIR); -- cgit v1.2.1