diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/cmdedit.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/shell/cmdedit.c b/shell/cmdedit.c index af29b05..a59aeeb 100644 --- a/shell/cmdedit.c +++ b/shell/cmdedit.c @@ -283,12 +283,12 @@ char** exe_n_cwd_tab_completion(char* command, int *num_matches) return (matches); } -void input_tab(char* command, char* prompt, int outputFd, int *cursor, int *len) +void input_tab(char* command, char* prompt, int outputFd, int *cursor, int *len, int lastWasTab) { /* Do TAB completion */ static int num_matches=0; static char **matches = (char **) NULL; - int pos = cursor; + int pos = *cursor; if (lastWasTab == FALSE) { @@ -303,7 +303,7 @@ void input_tab(char* command, char* prompt, int outputFd, int *cursor, int *len) /* Make a local copy of the string -- up * to the position of the cursor */ matchBuf = (char *) xcalloc(BUFSIZ, sizeof(char)); - strncpy(matchBuf, command, cursor); + strncpy(matchBuf, command, *cursor); tmp=matchBuf; /* skip past any command seperator tokens */ @@ -343,10 +343,10 @@ void input_tab(char* command, char* prompt, int outputFd, int *cursor, int *len) if (matches && num_matches==1) { /* write out the matched command */ strncpy(command+pos, matches[0]+pos, strlen(matches[0])-pos); - len=strlen(command); - cursor=len; + *len=strlen(command); + *cursor=*len; xwrite(outputFd, matches[0]+pos, strlen(matches[0])-pos); - break; + return; } } else { /* Ok -- the last char was a TAB. Since they @@ -372,9 +372,9 @@ void input_tab(char* command, char* prompt, int outputFd, int *cursor, int *len) /* Rewrite the prompt */ xwrite(outputFd, prompt, strlen(prompt)); /* Rewrite the command */ - xwrite(outputFd, command, len); + xwrite(outputFd, command, *len); /* Put the cursor back to where it used to be */ - for (cursor=len; cursor > pos; cursor--) + for (cursor=len; *cursor > pos; cursor--) xwrite(outputFd, "\b", 1); } } @@ -505,7 +505,8 @@ extern void cmdedit_read_input(char* prompt, char command[BUFSIZ]) break; case '\t': #ifdef BB_FEATURE_SH_TAB_COMPLETION - input_tab(command, prompt, outputFd, &cursor, &len); + input_tab(command, prompt, outputFd, &cursor, +&len, lastWasTab); #endif break; case 14: |