summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/ash.c32
-rw-r--r--shell/hush.c14
2 files changed, 40 insertions, 6 deletions
diff --git a/shell/ash.c b/shell/ash.c
index d4ee4c9..d2c5c5d 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -9732,7 +9732,7 @@ evalpipe(union node *n, int flags)
/* setinteractive needs this forward reference */
#if ENABLE_FEATURE_TAB_COMPLETION
-static const char *get_builtin_name(int i) FAST_FUNC;
+static const char *ash_command_name(int i) FAST_FUNC;
#endif
/*
@@ -9769,7 +9769,7 @@ setinteractive(int on)
if (!line_input_state) {
line_input_state = new_line_input_t(FOR_SHELL | WITH_PATH_LOOKUP);
# if ENABLE_FEATURE_TAB_COMPLETION
- line_input_state->get_exe_name = get_builtin_name;
+ line_input_state->get_exe_name = ash_command_name;
# endif
# if EDITING_HAS_sh_get_var
line_input_state->sh_get_var = lookupvar;
@@ -10284,9 +10284,33 @@ find_builtin(const char *name)
#if ENABLE_FEATURE_TAB_COMPLETION
static const char * FAST_FUNC
-get_builtin_name(int i)
+ash_command_name(int i)
{
- return /*i >= 0 &&*/ i < ARRAY_SIZE(builtintab) ? builtintab[i].name + 1 : NULL;
+ int n;
+
+ if (/*i >= 0 &&*/ i < ARRAY_SIZE(builtintab))
+ return builtintab[i].name + 1;
+ i -= ARRAY_SIZE(builtintab);
+
+ for (n = 0; n < CMDTABLESIZE; n++) {
+ struct tblentry *cmdp;
+ for (cmdp = cmdtable[n]; cmdp; cmdp = cmdp->next) {
+ if (cmdp->cmdtype == CMDFUNCTION && --i < 0)
+ return cmdp->cmdname;
+ }
+ }
+
+# if ENABLE_ASH_ALIAS
+ for (n = 0; n < ATABSIZE; n++) {
+ struct alias *ap;
+ for (ap = atab[n]; ap; ap = ap->next) {
+ if (--i < 0)
+ return ap->name;
+ }
+ }
+#endif
+
+ return NULL;
}
#endif
diff --git a/shell/hush.c b/shell/hush.c
index 202c099..f8951d0 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -8220,7 +8220,7 @@ static const struct built_in_command *find_builtin(const char *name)
}
#if ENABLE_HUSH_JOB && ENABLE_FEATURE_TAB_COMPLETION
-static const char * FAST_FUNC get_builtin_name(int i)
+static const char * FAST_FUNC hush_command_name(int i)
{
if (/*i >= 0 && */ i < ARRAY_SIZE(bltins1)) {
return bltins1[i].b_cmd;
@@ -8229,6 +8229,16 @@ static const char * FAST_FUNC get_builtin_name(int i)
if (i < ARRAY_SIZE(bltins2)) {
return bltins2[i].b_cmd;
}
+# if ENABLE_HUSH_FUNCTIONS
+ {
+ struct function *funcp;
+ i -= ARRAY_SIZE(bltins2);
+ for (funcp = G.top_func; funcp; funcp = funcp->next) {
+ if (--i < 0)
+ return funcp->name;
+ }
+ }
+# endif
return NULL;
}
#endif
@@ -10716,7 +10726,7 @@ int hush_main(int argc, char **argv)
# if ENABLE_FEATURE_EDITING
G.line_input_state = new_line_input_t(FOR_SHELL);
# if ENABLE_FEATURE_TAB_COMPLETION
- G.line_input_state->get_exe_name = get_builtin_name;
+ G.line_input_state->get_exe_name = hush_command_name;
# endif
# if EDITING_HAS_sh_get_var
G.line_input_state->sh_get_var = get_local_var_value;