diff options
author | Eric Andersen <andersen@codepoet.org> | 2000-07-04 06:22:18 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2000-07-04 06:22:18 +0000 |
commit | 72965e3454ae254455c6d6ce69cf0d5af62dc2db (patch) | |
tree | fee30ee9bd09708b3a84e525d9c2ed144f51c7df | |
parent | b54833cde0dfde26ad7c2d3a6cda9d7ff2dfe9ba (diff) |
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
-rw-r--r-- | cmdedit.c | 11 | ||||
-rw-r--r-- | shell/cmdedit.c | 11 |
2 files changed, 20 insertions, 2 deletions
@@ -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); 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) { 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); |