|
Benjamin Tissoires |
ad376fa |
From 095fc44e699b79ce28d30151e3768b933cf8e461 Mon Sep 17 00:00:00 2001
|
|
Benjamin Tissoires |
ad376fa |
From: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Benjamin Tissoires |
ad376fa |
Date: Wed, 28 Jan 2015 10:02:17 +1000
|
|
Benjamin Tissoires |
ad376fa |
Subject: [PATCH evemu 1/2] tools: handle holes in the event node lists
|
|
Benjamin Tissoires |
ad376fa |
|
|
Benjamin Tissoires |
ad376fa |
The current code simply counts the number of directory entries and takes that
|
|
Benjamin Tissoires |
ad376fa |
as the maximum event node given. That isn't true if we have a hole in the
|
|
Benjamin Tissoires |
ad376fa |
event range after removing a device, making the last device in the list
|
|
Benjamin Tissoires |
ad376fa |
unaccessible.
|
|
Benjamin Tissoires |
ad376fa |
|
|
Benjamin Tissoires |
ad376fa |
Fix this by actually looking at the event node numbers.
|
|
Benjamin Tissoires |
ad376fa |
|
|
Benjamin Tissoires |
ad376fa |
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Benjamin Tissoires |
ad376fa |
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
|
|
Benjamin Tissoires |
ad376fa |
---
|
|
Benjamin Tissoires |
ad376fa |
tools/find_event_devices.c | 10 ++++++++--
|
|
Benjamin Tissoires |
ad376fa |
1 file changed, 8 insertions(+), 2 deletions(-)
|
|
Benjamin Tissoires |
ad376fa |
|
|
Benjamin Tissoires |
ad376fa |
diff --git a/tools/find_event_devices.c b/tools/find_event_devices.c
|
|
Benjamin Tissoires |
ad376fa |
index fd975aa..1f7539a 100644
|
|
Benjamin Tissoires |
ad376fa |
--- a/tools/find_event_devices.c
|
|
Benjamin Tissoires |
ad376fa |
+++ b/tools/find_event_devices.c
|
|
Benjamin Tissoires |
ad376fa |
@@ -46,6 +46,7 @@ char* find_event_devices(void)
|
|
Benjamin Tissoires |
ad376fa |
struct dirent **namelist;
|
|
Benjamin Tissoires |
ad376fa |
int i, ndev, devnum;
|
|
Benjamin Tissoires |
ad376fa |
char *filename;
|
|
Benjamin Tissoires |
ad376fa |
+ int max_device = 0;
|
|
Benjamin Tissoires |
ad376fa |
|
|
Benjamin Tissoires |
ad376fa |
ndev = scandir(DEV_INPUT_EVENT, &namelist, is_event_device, versionsort);
|
|
Benjamin Tissoires |
ad376fa |
if (ndev <= 0)
|
|
Benjamin Tissoires |
ad376fa |
@@ -68,13 +69,18 @@ char* find_event_devices(void)
|
|
Benjamin Tissoires |
ad376fa |
|
|
Benjamin Tissoires |
ad376fa |
fprintf(stderr, "%s: %s\n", fname, name);
|
|
Benjamin Tissoires |
ad376fa |
close(fd);
|
|
Benjamin Tissoires |
ad376fa |
+
|
|
Benjamin Tissoires |
ad376fa |
+ sscanf(namelist[i]->d_name, "event%d", &devnum);
|
|
Benjamin Tissoires |
ad376fa |
+ if (devnum > max_device)
|
|
Benjamin Tissoires |
ad376fa |
+ max_device = devnum;
|
|
Benjamin Tissoires |
ad376fa |
+
|
|
Benjamin Tissoires |
ad376fa |
free(namelist[i]);
|
|
Benjamin Tissoires |
ad376fa |
}
|
|
Benjamin Tissoires |
ad376fa |
|
|
Benjamin Tissoires |
ad376fa |
- fprintf(stderr, "Select the device event number [0-%d]: ", ndev - 1);
|
|
Benjamin Tissoires |
ad376fa |
+ fprintf(stderr, "Select the device event number [0-%d]: ", max_device);
|
|
Benjamin Tissoires |
ad376fa |
scanf("%d", &devnum);
|
|
Benjamin Tissoires |
ad376fa |
|
|
Benjamin Tissoires |
ad376fa |
- if (devnum >= ndev || devnum < 0)
|
|
Benjamin Tissoires |
ad376fa |
+ if (devnum > max_device || devnum < 0)
|
|
Benjamin Tissoires |
ad376fa |
return NULL;
|
|
Benjamin Tissoires |
ad376fa |
|
|
Benjamin Tissoires |
ad376fa |
asprintf(&filename, "%s/%s%d",
|
|
Benjamin Tissoires |
ad376fa |
--
|
|
Benjamin Tissoires |
ad376fa |
2.4.2
|
|
Benjamin Tissoires |
ad376fa |
|