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