summaryrefslogtreecommitdiffstats
path: root/evdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'evdev.c')
-rw-r--r--evdev.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/evdev.c b/evdev.c
new file mode 100644
index 0000000..930c325
--- /dev/null
+++ b/evdev.c
@@ -0,0 +1,33 @@
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include "evdev.h"
+
+int find_default_keyboard(char *buffer, size_t buffer_len)
+{
+ FILE *devices;
+ char events[128];
+ char handlers[128];
+ char *event;
+ int i;
+
+ devices = fopen("/proc/bus/input/devices", "r");
+ if (!devices) {
+ perror("fopen");
+ return -1;
+ }
+ while (fgets(events, sizeof(events), devices)) {
+ if (strstr(events, "H: Handlers=") == events)
+ strcpy(handlers, events);
+ else if (!strcmp(events, "B: EV=120013\n") && (event = strstr(handlers, "event"))) {
+ for (i = 0, event += sizeof("event") - 1; *event && isdigit(*event); ++event, ++i)
+ handlers[i] = *event;
+ handlers[i] = '\0';
+ fclose(devices);
+ return snprintf(buffer, buffer_len, "/dev/input/event%s", handlers);
+ }
+ }
+ fclose(devices);
+ return -1;
+}