summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/find_event_devices.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/tools/find_event_devices.c b/tools/find_event_devices.c
index 3a74096..4cfb0ac 100644
--- a/tools/find_event_devices.c
+++ b/tools/find_event_devices.c
@@ -34,6 +34,14 @@
#include <fcntl.h>
#include <unistd.h>
+#ifdef __GLIBC__
+// versionsort sorts the device names in proper numerical order (e.g. so that
+// event10 is listed after event9, not event1), but is only available in glibc.
+static int (*sort_fn)(const struct dirent **, const struct dirent **) = versionsort;
+#else
+// Fall back to basic alphabetical sorting for other libc implementations.
+static int (*sort_fn)(const struct dirent **, const struct dirent **) = alphasort;
+#endif
#define DEV_INPUT_EVENT "/dev/input"
#define EVENT_DEV_NAME "event"
@@ -50,7 +58,7 @@ char* find_event_devices(void)
int max_device = 0;
int rc;
- ndev = scandir(DEV_INPUT_EVENT, &namelist, is_event_device, versionsort);
+ ndev = scandir(DEV_INPUT_EVENT, &namelist, is_event_device, sort_fn);
if (ndev <= 0)
return NULL;