From 72965e3454ae254455c6d6ce69cf0d5af62dc2db Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 4 Jul 2000 06:22:18 +0000 Subject: 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 --- cmdedit.c | 11 ++++++++++- shell/cmdedit.c | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/cmdedit.c b/cmdedit.c index 5cd43ae2a..515685f55 100644 --- a/cmdedit.c +++ b/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); 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); -- cgit v1.2.3