diff options
author | 2012-12-17 05:59:34 +0100 | |
---|---|---|
committer | 2012-12-17 05:59:34 +0100 | |
commit | efe183510c43969584db8262c89c1b8701fd01ab (patch) | |
tree | 6ba7a888606e63790a45e4c52d42262661788b82 /evdev.c | |
download | evdev-keylogger-master.tar.xz evdev-keylogger-master.zip |
Diffstat (limited to 'evdev.c')
-rw-r--r-- | evdev.c | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -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; +} |