]> git.scottworley.com Git - keystroke-timestamps/blobdiff - keystroke-timestamps.c
Make EOF fatal
[keystroke-timestamps] / keystroke-timestamps.c
index 693560025031b7a521cde6a196b145e90be07ce3..e370b22dba4b06a395124341e62684d1f15e64f5 100644 (file)
@@ -6,6 +6,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sysexits.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sysexits.h>
+#include <sys/select.h>
 #include <unistd.h>
 
 int main (int argc, char **argv)
 #include <unistd.h>
 
 int main (int argc, char **argv)
@@ -34,7 +35,21 @@ int main (int argc, char **argv)
   }
   free(device);
   struct input_event i;
   }
   free(device);
   struct input_event i;
-  while (read(fd, &i, sizeof(i)) == sizeof(i)) {
+  fd_set all_inputs, ready_inputs;
+  FD_ZERO(&all_inputs);
+  FD_SET(fd, &all_inputs);
+  while (1) {
+    ready_inputs = all_inputs;
+    if (select(fd+1, &ready_inputs, NULL, NULL, NULL) != 1) {
+      err(EX_IOERR, "select");
+    }
+    int read_return = read(fd, &i, sizeof(i));
+    if (read_return == -1) {
+      err(EX_IOERR, "read");
+    }
+    if (read_return != sizeof(i)) {
+      errx(EX_IOERR, "Unexpected EOF");
+    }
     if (i.type == 1 && i.value == 1) {
       if (print_usec) {
         printf("%ld.%06ld\n", i.time.tv_sec, i.time.tv_usec);
     if (i.type == 1 && i.value == 1) {
       if (print_usec) {
         printf("%ld.%06ld\n", i.time.tv_sec, i.time.tv_usec);