summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2010-03-25 18:47:22 +0000
committernicm <nicm@openbsd.org>2010-03-25 18:47:22 +0000
commit27b28cd40b2c6fbba6520a089d8c2ae59e58490f (patch)
tree2e1c57c466ba2dc365bb736459635ce045e5a2f7
parentbe more strict in check_option(). (diff)
downloadwireguard-openbsd-27b28cd40b2c6fbba6520a089d8c2ae59e58490f.tar.xz
wireguard-openbsd-27b28cd40b2c6fbba6520a089d8c2ae59e58490f.zip
Fix from readline 5.0 via Alexandr Shadchin to for a bug that prevents
some programs working correctly in tmux and screen. From the readline changelog: w. Fixed a bug in the callback read-char interface to make it work when a readline function pushes some input onto the input stream with rl_execute_next (like the incremental search functions). ok deraadt
-rw-r--r--gnu/lib/libreadline/callback.c2
-rw-r--r--gnu/lib/libreadline/input.c6
-rw-r--r--gnu/lib/libreadline/rlprivate.h1
3 files changed, 8 insertions, 1 deletions
diff --git a/gnu/lib/libreadline/callback.c b/gnu/lib/libreadline/callback.c
index a8f4323c929..5b05ea5c5b7 100644
--- a/gnu/lib/libreadline/callback.c
+++ b/gnu/lib/libreadline/callback.c
@@ -131,7 +131,7 @@ rl_callback_read_char ()
if (in_handler == 0 && rl_linefunc)
_rl_callback_newline ();
}
- if (rl_pending_input)
+ if (rl_pending_input || _rl_pushed_input_available ())
eof = readline_internal_char ();
else
break;
diff --git a/gnu/lib/libreadline/input.c b/gnu/lib/libreadline/input.c
index 841f05d1af9..7170272b229 100644
--- a/gnu/lib/libreadline/input.c
+++ b/gnu/lib/libreadline/input.c
@@ -154,6 +154,12 @@ _rl_unget_char (key)
return (0);
}
+int
+_rl_pushed_input_available ()
+{
+ return (push_index != pop_index);
+}
+
/* If a character is available to be read, then read it and stuff it into
IBUFFER. Otherwise, just return. Returns number of characters read
(0 if none available) and -1 on error (EIO). */
diff --git a/gnu/lib/libreadline/rlprivate.h b/gnu/lib/libreadline/rlprivate.h
index ccb914469e7..391acb4ae84 100644
--- a/gnu/lib/libreadline/rlprivate.h
+++ b/gnu/lib/libreadline/rlprivate.h
@@ -131,6 +131,7 @@ extern int _rl_input_available PARAMS((void));
extern int _rl_input_queued PARAMS((int));
extern void _rl_insert_typein PARAMS((int));
extern int _rl_unget_char PARAMS((int));
+extern int _rl_pushed_input_available PARAMS((void));
/* macro.c */
extern void _rl_with_macro_input PARAMS((char *));