summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bin/sh/input.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/bin/sh/input.c b/bin/sh/input.c
index f4bb703..81c1f0b 100644
--- a/bin/sh/input.c
+++ b/bin/sh/input.c
@@ -184,14 +184,23 @@ preadfd(void)
retry:
#ifndef NO_HISTORY
if (parsefile->fd == 0 && el) {
- const char *rl_cp;
+ static const char *rl_cp;
+ static int el_len;
- rl_cp = el_gets(el, &nr);
+ if (rl_cp == NULL)
+ rl_cp = el_gets(el, &el_len);
if (rl_cp == NULL)
nr = 0;
else {
- /* XXX - BUFSIZE should redesign so not necessary */
- (void) strcpy(parsenextc, rl_cp);
+ nr = el_len;
+ if (nr > BUFSIZ - 1)
+ nr = BUFSIZ - 1;
+ memcpy(parsenextc, rl_cp, nr);
+ if (nr != el_len) {
+ el_len -= nr;
+ rl_cp += nr;
+ } else
+ rl_cp = NULL;
}
} else
#endif
OpenPOWER on IntegriCloud