aboutsummaryrefslogtreecommitdiff
path: root/readline/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'readline/input.c')
-rw-r--r--readline/input.c66
1 files changed, 38 insertions, 28 deletions
diff --git a/readline/input.c b/readline/input.c
index 7e3c0fe..3b48483 100644
--- a/readline/input.c
+++ b/readline/input.c
@@ -124,38 +124,13 @@ _rl_any_typein ()
return any_typein;
}
-/* Add KEY to the buffer of characters to be read. */
-int
-rl_stuff_char (key)
- int key;
-{
- if (key == EOF)
- {
- key = NEWLINE;
- rl_pending_input = EOF;
- }
- ibuffer[push_index++] = key;
- if (push_index >= ibuffer_len)
- push_index = 0;
- return push_index;
-}
-
-/* Make C be the next command to be executed. */
-int
-rl_execute_next (c)
- int c;
-{
- rl_pending_input = c;
- return 0;
-}
-
-/* Return the amount of space available in the
- buffer for stuffing characters. */
+/* Return the amount of space available in the buffer for stuffing
+ characters. */
static int
ibuffer_space ()
{
if (pop_index > push_index)
- return (pop_index - push_index);
+ return (pop_index - push_index - 1);
else
return (ibuffer_len - (push_index - pop_index));
}
@@ -341,6 +316,36 @@ _rl_insert_typein (c)
free (string);
}
+/* Add KEY to the buffer of characters to be read. Returns 1 if the
+ character was stuffed correctly; 0 otherwise. */
+int
+rl_stuff_char (key)
+ int key;
+{
+ if (ibuffer_space () == 0)
+ return 0;
+
+ if (key == EOF)
+ {
+ key = NEWLINE;
+ rl_pending_input = EOF;
+ }
+ ibuffer[push_index++] = key;
+ if (push_index >= ibuffer_len)
+ push_index = 0;
+
+ return 1;
+}
+
+/* Make C be the next command to be executed. */
+int
+rl_execute_next (c)
+ int c;
+{
+ rl_pending_input = c;
+ return 0;
+}
+
/* **************************************************************** */
/* */
/* Character Input */
@@ -409,6 +414,11 @@ rl_getc (stream)
if (result == 0)
return (EOF);
+#if defined (__BEOS__)
+ if (errno == EINTR)
+ continue;
+#endif
+
#if defined (EWOULDBLOCK)
if (errno == EWOULDBLOCK)
{