From 0cc9b1843df8c4b6838446542b3f7d5780fb9e84 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 2 May 2017 20:39:02 +0200 Subject: vi: survive if stdin is nonblocking. closes 9851 function old new delta readit 55 69 +14 Signed-off-by: Denys Vlasenko --- editors/vi.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'editors/vi.c') 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 int c; fflush_all(); - c = read_key(STDIN_FILENO, readbuffer, /*timeout off:*/ -2); + + // Wait for input. TIMEOUT = -1 makes read_key wait even + // on nonblocking stdin. + // Note: read_key sets errno to 0 on success. + again: + c = read_key(STDIN_FILENO, readbuffer, /*timeout:*/ -1); if (c == -1) { // EOF/error + if (errno == EAGAIN) // paranoia + goto again; go_bottom_and_clear_to_eol(); cookmode(); // terminal to "cooked" bb_error_msg_and_die("can't read user input"); -- cgit v1.2.3