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
This commit is contained in:
David Lawrence Ramsey 2006-03-20 04:46:48 +00:00
parent ec8a055ffd
commit 9b33d51774
3 changed files with 12 additions and 11 deletions

View File

@ -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,

View File

@ -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;

View File

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