summaryrefslogtreecommitdiff
path: root/shell/cmdedit.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2000-07-04 06:22:18 +0000
committerEric Andersen <andersen@codepoet.org>2000-07-04 06:22:18 +0000
commit72965e3454ae254455c6d6ce69cf0d5af62dc2db (patch)
treefee30ee9bd09708b3a84e525d9c2ed144f51c7df /shell/cmdedit.c
parentb54833cde0dfde26ad7c2d3a6cda9d7ff2dfe9ba (diff)
downloadbusybox-w32-72965e3454ae254455c6d6ce69cf0d5af62dc2db.tar.gz
busybox-w32-72965e3454ae254455c6d6ce69cf0d5af62dc2db.tar.bz2
busybox-w32-72965e3454ae254455c6d6ce69cf0d5af62dc2db.zip
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 '')
-rw-r--r--shell/cmdedit.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/shell/cmdedit.c b/shell/cmdedit.c
index 5cd43ae2a..515685f55 100644
--- a/shell/cmdedit.c
+++ b/shell/cmdedit.c
@@ -143,6 +143,12 @@ void input_backspace(char* command, int outputFd, int *cursor, int *len)
143{ 143{
144 int j = 0; 144 int j = 0;
145 145
146/* Debug crap */
147//fprintf(stderr, "\nerik: len=%d, cursor=%d, strlen(command)='%d'\n", *len, *cursor, strlen(command));
148//xwrite(outputFd, command, *len);
149//*cursor = *len;
150
151
146 if (*cursor > 0) { 152 if (*cursor > 0) {
147 xwrite(outputFd, "\b \b", 3); 153 xwrite(outputFd, "\b \b", 3);
148 --*cursor; 154 --*cursor;
@@ -534,7 +540,10 @@ extern void cmdedit_read_input(char* prompt, char command[BUFSIZ])
534 rewrite_line: 540 rewrite_line:
535 /* erase old command from command line */ 541 /* erase old command from command line */
536 len = strlen(command)-strlen(hp->s); 542 len = strlen(command)-strlen(hp->s);
537 while (len>0) 543
544 while (len>cursor)
545 input_delete(command, outputFd, cursor, &len);
546 while (cursor>0)
538 input_backspace(command, outputFd, &cursor, &len); 547 input_backspace(command, outputFd, &cursor, &len);
539 input_home(outputFd, &cursor); 548 input_home(outputFd, &cursor);
540 549