From c275dc575a56be5781dacd8342903eb725f80e99 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Tue, 8 Mar 2005 17:45:36 +0000
Subject: [PATCH] attempt at fixing a problem tracked down by Jim Uhl, where
 nano will go into an infinite loop if the terminal it's running in dies
 unexpectedly due to a signal

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2339 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog   | 5 +++++
 src/winio.c | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index e0b7e189..00ce9ced 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -233,6 +233,11 @@ CVS code -
   revstrstr(), revstristr()
 	- Add asserts. (DLR)
 - winio.c:
+  get_buffer()
+	- If we get ERR when using blocking input, it means that the
+	  input source that we were using is gone.  In this case, call
+	  handle_hupterm(), so that nano dies gracefully instead of
+	  going into an infinite loop. (DLR, found by Jim Uhl)
   titlebar()
 	- Rename some variables for consistency, make space an int
 	  instead of a size_t, properly handle the case where the prefix
diff --git a/src/winio.c b/src/winio.c
index f3ed69bb..522a79ed 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -140,6 +140,11 @@ void get_buffer(WINDOW *win)
 
     input = wgetch(win);
 
+    /* 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);
 #endif
-- 
GitLab