readline/readline-6.3-input.dif

52 lines
1.5 KiB
Plaintext

---
lib/readline/input.c | 7 ++++++-
lib/readline/readline.c | 7 +++++++
2 files changed, 13 insertions(+), 1 deletion(-)
--- lib/readline/input.c
+++ lib/readline/input.c 2018-11-29 08:29:58.432878428 +0000
@@ -801,6 +801,8 @@ rl_read_key (void)
return (c);
}
+extern int _rl_read_zero_char_from_tty;
+
int
rl_getc (FILE *stream)
{
@@ -862,7 +864,10 @@ rl_getc (FILE *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)
--- lib/readline/readline.c
+++ lib/readline/readline.c 2018-11-29 08:29:58.432878428 +0000
@@ -557,6 +557,9 @@ _rl_internal_char_cleanup (void)
_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 (void)
@@ -614,6 +617,10 @@ readline_internal_charloop (void)
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; assume that rl_read_key has already called the signal