conspy: stop losing some keyboard keys.
authorPascal Bellard <pascal.bellard@ads-lu.com>
Thu, 1 Jul 2010 05:18:41 +0000 (07:18 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 1 Jul 2010 05:18:41 +0000 (07:18 +0200)
11 bytes shrink.

Signed-off-by: Pascal Bellard <pascal.bellard@ads-lu.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/conspy.c

index 565922ca07309af4aa6eb0e79f111e4d59fceaa2..3f341ce18734316022e07c1e87db8a8d14b5b24a 100644 (file)
@@ -517,21 +517,23 @@ int conspy_main(int argc UNUSED_PARAM, char **argv)
                        G.key_count += bytes_read;
                        handle = xopen(tty_name, O_WRONLY);
                        result = ioctl(handle, KDGKBMODE, &kbd_mode);
-                       if (result == -1)
-                               /* nothing */;
-                       else if (kbd_mode != K_XLATE && kbd_mode != K_UNICODE)
-                               G.key_count = 0; // scan code mode
-                       else {
+                       if (result >= 0) {
                                char *p = keybuf;
-                               for (; G.key_count != 0 && result != -1; p++, G.key_count--) {
+
+                               if (kbd_mode != K_XLATE && kbd_mode != K_UNICODE) {
+                                       G.key_count = 0; // scan code mode
+                               }
+                               for (; G.key_count != 0; p++, G.key_count--) {
                                        result = ioctl(handle, TIOCSTI, p);
+                                       if (result < 0) {
+                                               memmove(keybuf, p, G.key_count);
+                                               break;
+                                       }
                                        // If there is an application on console which reacts
                                        // to keypresses, we need to make our first sleep
                                        // shorter to quickly redraw whatever it printed there.
                                        poll_timeout_ms = 20;
                                }
-                               if (G.key_count)
-                                       memmove(keybuf, p, G.key_count);
                        }
                        // Close & re-open tty in case they have
                        // swapped virtual consoles
@@ -539,7 +541,7 @@ int conspy_main(int argc UNUSED_PARAM, char **argv)
 
                        // We sometimes get spurious IO errors on the TTY
                        // as programs close and re-open it
-                       if (result != -1)
+                       if (result >= 0)
                                G.ioerror_count = 0;
                        else if (errno != EIO || ++G.ioerror_count > 4)
                                cleanup(1);