summaryrefslogtreecommitdiff
path: root/shell/cmdedit.c
diff options
context:
space:
mode:
authorEric Andersen2000-07-04 06:22:18 +0000
committerEric Andersen2000-07-04 06:22:18 +0000
commit72965e3454ae254455c6d6ce69cf0d5af62dc2db (patch)
treefee30ee9bd09708b3a84e525d9c2ed144f51c7df /shell/cmdedit.c
parentb54833cde0dfde26ad7c2d3a6cda9d7ff2dfe9ba (diff)
downloadbusybox-72965e3454ae254455c6d6ce69cf0d5af62dc2db.zip
busybox-72965e3454ae254455c6d6ce69cf0d5af62dc2db.tar.gz
Fixed a potential infinite loop. First delete any chars after the
cursor, then delete everything before it. Before this, we would just delete everything before the cursor and freak out if there were still chars left (i.e. stuff after the cursor). -Erik
Diffstat (limited to 'shell/cmdedit.c')
-rw-r--r--shell/cmdedit.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/shell/cmdedit.c b/shell/cmdedit.c
index 5cd43ae..515685f 100644
--- a/shell/cmdedit.c
+++ b/shell/cmdedit.c
@@ -143,6 +143,12 @@ void input_backspace(char* command, int outputFd, int *cursor, int *len)
{
int j = 0;
+/* Debug crap */
+//fprintf(stderr, "\nerik: len=%d, cursor=%d, strlen(command)='%d'\n", *len, *cursor, strlen(command));
+//xwrite(outputFd, command, *len);
+//*cursor = *len;
+
+
if (*cursor > 0) {
xwrite(outputFd, "\b \b", 3);
--*cursor;
@@ -534,7 +540,10 @@ extern void cmdedit_read_input(char* prompt, char command[BUFSIZ])
rewrite_line:
/* erase old command from command line */
len = strlen(command)-strlen(hp->s);
- while (len>0)
+
+ while (len>cursor)
+ input_delete(command, outputFd, cursor, &len);
+ while (cursor>0)
input_backspace(command, outputFd, &cursor, &len);
input_home(outputFd, &cursor);