summaryrefslogtreecommitdiffstats
path: root/lib/readline.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2008-03-02 17:23:10 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2008-03-02 17:23:10 +0100
commit23d1cead89190823609cfd9ce1112237bd310843 (patch)
tree37ea247fdf7a0fa95b62dbe81820aa8c4dfec93a /lib/readline.c
parent1a8e0f589f55a0ac2625f7d885944451b41a2eed (diff)
downloadbarebox-23d1cead89190823609cfd9ce1112237bd310843.tar.gz
barebox-23d1cead89190823609cfd9ce1112237bd310843.tar.xz
readline: Fix a bug when tab completion is used in the middle
of the line.
Diffstat (limited to 'lib/readline.c')
-rw-r--r--lib/readline.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/readline.c b/lib/readline.c
index 1bdfe61b9d..503f4efaea 100644
--- a/lib/readline.c
+++ b/lib/readline.c
@@ -201,17 +201,25 @@ int readline(const char *prompt, char *buf, int len)
switch (ichar) {
case '\t':
#ifdef CONFIG_AUTO_COMPLETE
+ buf[eol_num] = 0;
tmp = buf[num];
+
buf[num] = 0;
reprint = complete(buf, &completestr);
- if (reprint)
+ buf[num] = tmp;
+
+ if (reprint) {
printf("%s%s", prompt, buf);
+ if (tmp)
+ for (i = 0; i < eol_num - num; i++)
+ getcmd_putch(CTL_BACKSPACE);
+ }
+
i = 0;
while (completestr[i])
- cread_add_char(completestr[i++], insert, &num, &eol_num, buf, len);
-
- buf[num] = tmp;
+ cread_add_char(completestr[i++], insert, &num,
+ &eol_num, buf, len);
#endif
break;