commit 9b33d5177414c8b96f52c1cf25bbd6d6d981393a
parent ec8a055ffd36c9546db1d770ae1ad44639ec99e1
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date: Mon, 20 Mar 2006 04:46:48 +0000
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
Diffstat:
3 files changed, 12 insertions(+), 11 deletions(-)
diff --git 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 <acocaracha@gmail.com>)
+ window. errno isn't set properly to EIO then. (DLR, found by
+ John <acocaracha@gmail.com>)
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
@@ -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
@@ -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);
}