From 9b33d5177414c8b96f52c1cf25bbd6d6d981393a Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Mon, 20 Mar 2006 04:46:48 +0000 Subject: [PATCH] in get_key_buffer(), simplify the check for a lost input source, since the errno check is unreliable git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3311 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 3 ++- src/nano.c | 8 ++++---- src/winio.c | 12 ++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index aab8dc3e..e0c41ebc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -63,7 +63,8 @@ CVS code - row, hang up regardless of the value of errno. This fixes a problem where nano doesn't terminate properly under xterm if the user su's to root, runs nano, and then closes the terminal - window. (DLR, found by John ) + window. errno isn't set properly to EIO then. (DLR, found by + John ) parse_kbinput() - Interpret Shift-Begin, Shift-Delete, Shift-End, Shift-Home, Shift-Insert, and Shift-Suspend as Begin, Delete, End, Home, diff --git a/src/nano.c b/src/nano.c index 408a7dc0..1c923999 100644 --- a/src/nano.c +++ b/src/nano.c @@ -1044,10 +1044,10 @@ RETSIGTYPE handle_sigwinch(int signal) if (result == -1) return; - /* Could check whether the COLS or LINES changed, and return - * otherwise. EXCEPT, that COLS and LINES are ncurses global - * variables, and in some cases ncurses has already updated them. - * But not in all cases, argh. */ + /* We could check whether the COLS or LINES changed, and return + * otherwise. However, COLS and LINES are curses global variables, + * and in some cases curses has already updated them. But not in + * all cases. Argh. */ COLS = win.ws_col; LINES = win.ws_row; diff --git a/src/winio.c b/src/winio.c index ae6a1290..b9c9e1f1 100644 --- a/src/winio.c +++ b/src/winio.c @@ -142,12 +142,12 @@ void get_key_buffer(WINDOW *win) while ((input = wgetch(win)) == ERR) { errcount++; - /* If errno is EIO, it means that the input source that we were - * using is gone, so die gracefully. If we've failed to get a - * character over MAX_BUF_SIZE times in a row, it can mean the - * same thing regardless of the value of errno, so die - * gracefully then too. */ - if (errno == EIO || errcount > MAX_BUF_SIZE) + /* If we've failed to get a character over MAX_BUF_SIZE times in + * a row, assume that the input source we were using is gone and + * die gracefully. We could check if errno is set to EIO + * ("Input/output error") and die gracefully in that case, but + * it's not always set properly. Argh. */ + if (errcount > MAX_BUF_SIZE) handle_hupterm(0); } -- 2.39.5