summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPascal Bellard <pascal.bellard@ads-lu.com>2010-07-01 05:18:41 (GMT)
committer Denys Vlasenko <vda.linux@googlemail.com>2010-07-01 05:18:41 (GMT)
commit81199672bed1446fa6b584728c92ecfb11bc530b (patch)
tree545f6f3bfbff6018edfcfeb14ea5d4c3549cdc1d
parent45f66167fe96de219aac91d842f3e64d857340f6 (diff)
downloadbusybox-81199672bed1446fa6b584728c92ecfb11bc530b.tar.gz
busybox-81199672bed1446fa6b584728c92ecfb11bc530b.tar.bz2
conspy: stop losing some keyboard keys.
11 bytes shrink. Signed-off-by: Pascal Bellard <pascal.bellard@ads-lu.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--miscutils/conspy.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/miscutils/conspy.c b/miscutils/conspy.c
index 565922c..3f341ce 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);