input
authorAnas Nashif <anas.nashif@intel.com>
Wed, 7 Nov 2012 14:48:00 +0000 (06:48 -0800)
committerAnas Nashif <anas.nashif@intel.com>
Wed, 7 Nov 2012 14:48:00 +0000 (06:48 -0800)
input.c
readline.c

diff --git a/input.c b/input.c
index 4206a3e..34ba67e 100644 (file)
--- a/input.c
+++ b/input.c
@@ -456,6 +456,8 @@ rl_read_key ()
   return (c);
 }
 
+extern int _rl_read_zero_char_from_tty;
+
 int
 rl_getc (stream)
      FILE *stream;
@@ -477,7 +479,10 @@ rl_getc (stream)
       /* If zero characters are returned, then the file that we are
         reading from is empty!  Return EOF in that case. */
       if (result == 0)
-       return (EOF);
+       {
+         _rl_read_zero_char_from_tty = 1;
+         return (EOF);
+       }
 
 #if defined (__BEOS__)
       if (errno == EINTR)
index 22ea7bc..a81df1c 100644 (file)
@@ -440,6 +440,9 @@ _rl_internal_char_cleanup ()
     _rl_erase_entire_line ();
 }
 
+/* Catch EOF from tty, do not return command line */
+int _rl_read_zero_char_from_tty = 0;
+
 STATIC_CALLBACK int
 #if defined (READLINE_CALLBACKS)
 readline_internal_char ()
@@ -484,6 +487,10 @@ readline_internal_charloop ()
       c = rl_read_key ();
       RL_UNSETSTATE(RL_STATE_READCMD);
 
+      /* Return here if terminal is closed */
+      if (c == EOF && _rl_read_zero_char_from_tty)
+       return (rl_done = 1);
+
       /* look at input.c:rl_getc() for the circumstances under which this will
         be returned; punt immediately on read error without converting it to
         a newline. */