]> git.scottworley.com Git - keystroke-timestamps/blobdiff - keystroke-timestamps.c
Skip lines that are greater than 67767976233561595
[keystroke-timestamps] / keystroke-timestamps.c
index 6cb49731cba993b270561b790e55fed2f4f5657f..037919f01d035b1d5b8f3d8756a0ec2bd11acdc8 100644 (file)
@@ -1,10 +1,10 @@
 #include <err.h>
 #include <fcntl.h>
+#include <glob.h>
 #include <getopt.h>
 #include <linux/input.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <string.h>
 #include <sysexits.h>
 #include <sys/select.h>
 #include <unistd.h>
@@ -12,7 +12,7 @@
 int main (int argc, char **argv)
 {
   int print_usec = 0;
-  char* device = strdup("/dev/input/by-path/platform-i8042-serio-0-event-kbd");
+  char* device = "/dev/input/by-path/*kbd*";
   struct option long_options[] = {
     {"device", required_argument, 0,            'd' },
     {"usec",   no_argument,       &print_usec,  1   },
@@ -22,25 +22,38 @@ int main (int argc, char **argv)
     int c = getopt_long(argc, argv, "", long_options, NULL);
     if (c == -1) break;
     if (c == 'd') {
-      free(device);
-      device = strdup(optarg);
+      device = optarg;
       continue;
     }
     if (c != 0) exit(EX_USAGE);
   }
 
-  int open_fd = open(device, O_RDONLY);
-  if (open_fd < 0) {
-    err(EX_NOINPUT, "Could not open keyboard event file");
+  fd_set all_inputs;
+  FD_ZERO(&all_inputs);
+  int maxfd = 0;
+  glob_t glob_result;
+  int glob_return = glob(device, GLOB_ERR | GLOB_NOSORT, NULL, &glob_result);
+  if (glob_return == GLOB_NOMATCH) {
+    errx(EX_NOINPUT, "Could not find keyboard event file(s): %s", device);
+  }
+  if (glob_return != 0) {
+    err(EX_NOINPUT, "Could not glob keyboard event file(s): %s", device);
   }
-  int maxfd = open_fd;
-  free(device);
+  for (unsigned i = 0; i < glob_result.gl_pathc; i++) {
+    int open_fd = open(glob_result.gl_pathv[i], O_RDONLY);
+    if (open_fd < 0) {
+      err(EX_NOINPUT, "Could not open keyboard event file: %s", glob_result.gl_pathv[i]);
+    }
+    if (open_fd > maxfd) {
+      maxfd = open_fd;
+    }
+    FD_SET(open_fd, &all_inputs);
+  }
+  globfree(&glob_result);
+
   struct input_event i;
-  fd_set all_inputs, ready_inputs;
-  FD_ZERO(&all_inputs);
-  FD_SET(open_fd, &all_inputs);
   while (1) {
-    ready_inputs = all_inputs;
+    fd_set ready_inputs = all_inputs;
     if (select(maxfd+1, &ready_inputs, NULL, NULL, NULL) != 1) {
       err(EX_IOERR, "select");
     }