From: David Lawrence Ramsey Date: Thu, 6 Oct 2005 05:28:37 +0000 (+0000) Subject: in get_key_buffer(), only save all open buffers and hang up when a X-Git-Tag: v1.3.9~8 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=6f5de427025feefd1a52e7e555992b523bea0131;p=nano.git in get_key_buffer(), only save all open buffers and hang up when a blocking wgetch() returns ERR and errno is set to EIO (input/output error); if errno is set to something else, recover properly; this fixes problems with nano's erroneously hanging up while e.g. resizing or unsuspending in a chroot git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3038 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- diff --git a/ChangeLog b/ChangeLog index 2fbeeac9..b0fdf24b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -325,6 +325,13 @@ CVS code - the number of lines and characters in the file or selection, as wc does. (DLR) - winio.c: + get_key_buffer() + - Only save all open buffers and hang up when a blocking + wgetch() returns ERR and errno is set to EIO (input/output + error). If errno is set to something else, recover properly. + This fixes problems with nano's erroneously hanging up while + e.g. resizing or unsuspending in a chroot. (DLR, found by Mike + Frysinger) get_escape_seq_kbinput() - Fix typo preventing the VT100/VT220/VT320/xterm/rxvt escape sequence for ',' on the numeric keypad with NumLock off from diff --git a/src/winio.c b/src/winio.c index e2487bf1..be0b832a 100644 --- a/src/winio.c +++ b/src/winio.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include "proto.h" @@ -142,12 +143,13 @@ void get_key_buffer(WINDOW *win) * screen updates. */ doupdate(); - input = wgetch(win); + while ((input = wgetch(win)) == ERR) { + /* If errno is EIO, it means that the input source that we were + * using is gone, so die gracefully. */ + if (errno == EIO) + handle_hupterm(0); + } - /* If we get ERR when using blocking input, it means that the input - * source that we were using is gone, so die gracefully. */ - if (input == ERR) - handle_hupterm(0); #ifndef NANO_SMALL allow_pending_sigwinch(FALSE);