commit 6f5de427025feefd1a52e7e555992b523bea0131
parent 7de4dc8d08211932a749f196cc93c051c21d01f1
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date: Thu, 6 Oct 2005 05:28:37 +0000
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
Diffstat:
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git 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
@@ -27,6 +27,7 @@
#include <stdarg.h>
#include <string.h>
#include <unistd.h>
+#include <errno.h>
#include <ctype.h>
#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);