aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmdedit.c19
-rw-r--r--shell/cmdedit.c19
2 files changed, 20 insertions, 18 deletions
diff --git a/cmdedit.c b/cmdedit.c
index af29b059a..a59aeebb7 100644
--- a/cmdedit.c
+++ b/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:
diff --git a/shell/cmdedit.c b/shell/cmdedit.c
index af29b059a..a59aeebb7 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: