aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editors/vi.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/editors/vi.c b/editors/vi.c
index f33db66c6..76d1f261b 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -2816,8 +2816,15 @@ static int readit(void) // read (maybe cursor) key from stdin
2816 int c; 2816 int c;
2817 2817
2818 fflush_all(); 2818 fflush_all();
2819 c = read_key(STDIN_FILENO, readbuffer, /*timeout off:*/ -2); 2819
2820 // Wait for input. TIMEOUT = -1 makes read_key wait even
2821 // on nonblocking stdin.
2822 // Note: read_key sets errno to 0 on success.
2823 again:
2824 c = read_key(STDIN_FILENO, readbuffer, /*timeout:*/ -1);
2820 if (c == -1) { // EOF/error 2825 if (c == -1) { // EOF/error
2826 if (errno == EAGAIN) // paranoia
2827 goto again;
2821 go_bottom_and_clear_to_eol(); 2828 go_bottom_and_clear_to_eol();
2822 cookmode(); // terminal to "cooked" 2829 cookmode(); // terminal to "cooked"
2823 bb_error_msg_and_die("can't read user input"); 2830 bb_error_msg_and_die("can't read user input");