aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-08-03 14:17:21 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-08-03 14:17:21 +0000
commit46340e398e93898ce097b06f5e26c86e33fd651a (patch)
tree45a657af806c6cb6eed024a17dd4a5444c1c25ea
parent0e2c9fb4e09fb0c5a47ddc74b0ba53238570599e (diff)
downloadbusybox-w32-46340e398e93898ce097b06f5e26c86e33fd651a.tar.gz
busybox-w32-46340e398e93898ce097b06f5e26c86e33fd651a.tar.bz2
busybox-w32-46340e398e93898ce097b06f5e26c86e33fd651a.zip
less: add a bit more robustness in keyboard reading code
-rw-r--r--miscutils/less.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/miscutils/less.c b/miscutils/less.c
index 9b2c43bd5..a6649c5ca 100644
--- a/miscutils/less.c
+++ b/miscutils/less.c
@@ -699,10 +699,11 @@ static int less_getch(void)
699 char input[16]; 699 char input[16];
700 unsigned i; 700 unsigned i;
701 again: 701 again:
702 memset(input, 0, sizeof(input));
702 getch_nowait(input, sizeof(input)); 703 getch_nowait(input, sizeof(input));
704
703 /* Detect escape sequences (i.e. arrow keys) and handle 705 /* Detect escape sequences (i.e. arrow keys) and handle
704 * them accordingly */ 706 * them accordingly */
705
706 if (input[0] == '\033' && input[1] == '[') { 707 if (input[0] == '\033' && input[1] == '[') {
707 set_tty_cooked(); 708 set_tty_cooked();
708 i = input[2] - REAL_KEY_UP; 709 i = input[2] - REAL_KEY_UP;
@@ -740,6 +741,7 @@ static char* less_gets(int sz)
740 * but it is needed. Is it because of stdio? */ 741 * but it is needed. Is it because of stdio? */
741 tcsetattr(kbd_fd, TCSANOW, &term_less); 742 tcsetattr(kbd_fd, TCSANOW, &term_less);
742 743
744 c = '\0';
743 read(kbd_fd, &c, 1); 745 read(kbd_fd, &c, 1);
744 if (c == 0x0d) 746 if (c == 0x0d)
745 return result; 747 return result;