diff options
author | andersen <andersen@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2000-07-04 06:22:18 +0000 |
---|---|---|
committer | andersen <andersen@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2000-07-04 06:22:18 +0000 |
commit | e20527405760aa661aca9eab9b7c733aa6e89040 (patch) | |
tree | fee30ee9bd09708b3a84e525d9c2ed144f51c7df /shell | |
parent | cb0f679ab5f338f4a00915d8f01e7b74ae04369a (diff) | |
download | busybox-w32-e20527405760aa661aca9eab9b7c733aa6e89040.tar.gz busybox-w32-e20527405760aa661aca9eab9b7c733aa6e89040.tar.bz2 busybox-w32-e20527405760aa661aca9eab9b7c733aa6e89040.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
git-svn-id: svn://busybox.net/trunk/busybox@731 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'shell')
-rw-r--r-- | shell/cmdedit.c | 11 |
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 | ||