]> git.wh0rd.org Git - nano.git/commitdiff
in get_key_buffer(), only save all open buffers and hang up when a
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Thu, 6 Oct 2005 05:28:37 +0000 (05:28 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Thu, 6 Oct 2005 05:28:37 +0000 (05:28 +0000)
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

ChangeLog
src/winio.c

index 2fbeeac9ef87ee4d3ef2a38164401af17694323c..b0fdf24baf577244492e153d2a57dc45dc0692c9 100644 (file)
--- 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
index e2487bf18a92dc7c61b77bc0799c66832f8e654b..be0b832ad09456862d0b868f46981dbfc7c6104d 100644 (file)
@@ -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);