diff options
-rw-r--r-- | tools/find_event_devices.c | 10 |
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; |