summaryrefslogtreecommitdiff
path: root/sys-libs/readline/files/readline-6.3-read-eof.patch
diff options
context:
space:
mode:
Diffstat (limited to 'sys-libs/readline/files/readline-6.3-read-eof.patch')
-rw-r--r--sys-libs/readline/files/readline-6.3-read-eof.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/sys-libs/readline/files/readline-6.3-read-eof.patch b/sys-libs/readline/files/readline-6.3-read-eof.patch
new file mode 100644
index 000000000000..f74aad63be1f
--- /dev/null
+++ b/sys-libs/readline/files/readline-6.3-read-eof.patch
@@ -0,0 +1,54 @@
+http://lists.gnu.org/archive/html/bug-bash/2014-12/msg00152.html
+
+*** ../bash-4.3-patched/lib/readline/readline.c 2014-10-01 13:08:28.000000000 -0400
+--- lib/readline/readline.c 2014-12-20 22:37:28.000000000 -0500
+***************
+*** 580,592 ****
+ }
+
+! /* EOF typed to a non-blank line is a <NL>. If we want to change this,
+! to force any existing line to be ignored when read(2) reads EOF,
+! for example, this is the place to change. */
+ if (c == EOF && rl_end)
+! c = NEWLINE;
+
+ /* The character _rl_eof_char typed to blank line, and not as the
+! previous character is interpreted as EOF. */
+! if (((c == _rl_eof_char && lastc != c) || c == EOF) && !rl_end)
+ {
+ #if defined (READLINE_CALLBACKS)
+--- 587,620 ----
+ }
+
+! /* EOF typed to a non-blank line is ^D the first time, EOF the second
+! time in a row. This won't return any partial line read from the tty.
+! If we want to change this, to force any existing line to be returned
+! when read(2) reads EOF, for example, this is the place to change. */
+ if (c == EOF && rl_end)
+! {
+! if (RL_SIG_RECEIVED ())
+! {
+! RL_CHECK_SIGNALS ();
+! if (rl_signal_event_hook)
+! (*rl_signal_event_hook) (); /* XXX */
+! }
+!
+! /* XXX - reading two consecutive EOFs returns EOF */
+! if (RL_ISSTATE (RL_STATE_TERMPREPPED))
+! {
+! if (lastc == _rl_eof_char || lastc == EOF)
+! rl_end = 0;
+! else
+! c = _rl_eof_char;
+! }
+! else
+! c = NEWLINE;
+! }
+
+ /* The character _rl_eof_char typed to blank line, and not as the
+! previous character is interpreted as EOF. This doesn't work when
+! READLINE_CALLBACKS is defined, so hitting a series of ^Ds will
+! erase all the chars on the line and then return EOF. */
+! if (((c == _rl_eof_char && lastc != c) || c == EOF) && rl_end == 0)
+ {
+ #if defined (READLINE_CALLBACKS)