From 81199672bed1446fa6b584728c92ecfb11bc530b Mon Sep 17 00:00:00 2001 From: Pascal Bellard Date: Thu, 1 Jul 2010 07:18:41 +0200 Subject: conspy: stop losing some keyboard keys. 11 bytes shrink. Signed-off-by: Pascal Bellard Signed-off-by: Denys Vlasenko --- miscutils/conspy.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'miscutils/conspy.c') diff --git a/miscutils/conspy.c b/miscutils/conspy.c index 565922ca0..3f341ce18 100644 --- a/miscutils/conspy.c +++ b/miscutils/conspy.c @@ -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); -- cgit v1.2.3