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,
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;
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);
}