diff options
| author | Ron Yorston <rmy@pobox.com> | 2023-01-05 08:56:27 +0000 |
|---|---|---|
| committer | Ron Yorston <rmy@pobox.com> | 2023-01-05 08:56:27 +0000 |
| commit | e5e4a2fec5435192d1672e6db2f335cb5e89f877 (patch) | |
| tree | 08cb827a40817ea4824bc9336d57eda669c4d4b2 /shell | |
| parent | 4343f3926355f55fc023203c992527fc34bf609e (diff) | |
| parent | b1884deb514c35289d37e7bfbf23f770b0bd09b3 (diff) | |
| download | busybox-w32-e5e4a2fec5435192d1672e6db2f335cb5e89f877.tar.gz busybox-w32-e5e4a2fec5435192d1672e6db2f335cb5e89f877.tar.bz2 busybox-w32-e5e4a2fec5435192d1672e6db2f335cb5e89f877.zip | |
Merge branch 'busybox' into merge
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/ash.c | 10 | ||||
| -rw-r--r-- | shell/hush.c | 19 |
2 files changed, 21 insertions, 8 deletions
diff --git a/shell/ash.c b/shell/ash.c index 13200da0c..6a4b8e273 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -10606,7 +10606,7 @@ evalpipe(union node *n, int flags) | |||
| 10606 | } | 10606 | } |
| 10607 | 10607 | ||
| 10608 | /* setinteractive needs this forward reference */ | 10608 | /* setinteractive needs this forward reference */ |
| 10609 | #if ENABLE_FEATURE_EDITING | 10609 | #if ENABLE_FEATURE_TAB_COMPLETION |
| 10610 | static const char *get_builtin_name(int i) FAST_FUNC; | 10610 | static const char *get_builtin_name(int i) FAST_FUNC; |
| 10611 | #endif | 10611 | #endif |
| 10612 | 10612 | ||
| @@ -10643,8 +10643,12 @@ setinteractive(int on) | |||
| 10643 | #if ENABLE_FEATURE_EDITING | 10643 | #if ENABLE_FEATURE_EDITING |
| 10644 | if (!line_input_state) { | 10644 | if (!line_input_state) { |
| 10645 | line_input_state = new_line_input_t(FOR_SHELL | WITH_PATH_LOOKUP); | 10645 | line_input_state = new_line_input_t(FOR_SHELL | WITH_PATH_LOOKUP); |
| 10646 | # if ENABLE_FEATURE_TAB_COMPLETION | ||
| 10646 | line_input_state->get_exe_name = get_builtin_name; | 10647 | line_input_state->get_exe_name = get_builtin_name; |
| 10648 | # endif | ||
| 10649 | # if EDITING_HAS_sh_get_var | ||
| 10647 | line_input_state->sh_get_var = lookupvar; | 10650 | line_input_state->sh_get_var = lookupvar; |
| 10651 | # endif | ||
| 10648 | } | 10652 | } |
| 10649 | #endif | 10653 | #endif |
| 10650 | } | 10654 | } |
| @@ -10888,7 +10892,7 @@ mklocal(char *name, int flags) | |||
| 10888 | setvareq(name, flags); | 10892 | setvareq(name, flags); |
| 10889 | else | 10893 | else |
| 10890 | /* "local VAR" unsets VAR: */ | 10894 | /* "local VAR" unsets VAR: */ |
| 10891 | setvar0(name, NULL); | 10895 | unsetvar(name); |
| 10892 | } | 10896 | } |
| 10893 | } | 10897 | } |
| 10894 | lvp->vp = vp; | 10898 | lvp->vp = vp; |
| @@ -11157,7 +11161,7 @@ find_builtin(const char *name) | |||
| 11157 | return bp; | 11161 | return bp; |
| 11158 | } | 11162 | } |
| 11159 | 11163 | ||
| 11160 | #if ENABLE_FEATURE_EDITING | 11164 | #if ENABLE_FEATURE_TAB_COMPLETION |
| 11161 | static const char * FAST_FUNC | 11165 | static const char * FAST_FUNC |
| 11162 | get_builtin_name(int i) | 11166 | get_builtin_name(int i) |
| 11163 | { | 11167 | { |
diff --git a/shell/hush.c b/shell/hush.c index 051b123e7..d111f0cc5 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
| @@ -2460,10 +2460,15 @@ static int set_local_var(char *str, unsigned flags) | |||
| 2460 | return retval; | 2460 | return retval; |
| 2461 | } | 2461 | } |
| 2462 | 2462 | ||
| 2463 | static int set_local_var0(char *str) | ||
| 2464 | { | ||
| 2465 | return set_local_var(str, 0); | ||
| 2466 | } | ||
| 2467 | |||
| 2463 | static void FAST_FUNC set_local_var_from_halves(const char *name, const char *val) | 2468 | static void FAST_FUNC set_local_var_from_halves(const char *name, const char *val) |
| 2464 | { | 2469 | { |
| 2465 | char *var = xasprintf("%s=%s", name, val); | 2470 | char *var = xasprintf("%s=%s", name, val); |
| 2466 | set_local_var(var, /*flag:*/ 0); | 2471 | set_local_var0(var); |
| 2467 | } | 2472 | } |
| 2468 | 2473 | ||
| 2469 | /* Used at startup and after each cd */ | 2474 | /* Used at startup and after each cd */ |
| @@ -6964,7 +6969,7 @@ static NOINLINE int expand_one_var(o_string *output, int n, | |||
| 6964 | val = NULL; | 6969 | val = NULL; |
| 6965 | } else { | 6970 | } else { |
| 6966 | char *new_var = xasprintf("%s=%s", var, val); | 6971 | char *new_var = xasprintf("%s=%s", var, val); |
| 6967 | set_local_var(new_var, /*flag:*/ 0); | 6972 | set_local_var0(new_var); |
| 6968 | } | 6973 | } |
| 6969 | } | 6974 | } |
| 6970 | } | 6975 | } |
| @@ -8188,7 +8193,7 @@ static const struct built_in_command *find_builtin(const char *name) | |||
| 8188 | return find_builtin_helper(name, bltins2, &bltins2[ARRAY_SIZE(bltins2)]); | 8193 | return find_builtin_helper(name, bltins2, &bltins2[ARRAY_SIZE(bltins2)]); |
| 8189 | } | 8194 | } |
| 8190 | 8195 | ||
| 8191 | #if ENABLE_HUSH_JOB && ENABLE_FEATURE_EDITING | 8196 | #if ENABLE_HUSH_JOB && ENABLE_FEATURE_TAB_COMPLETION |
| 8192 | static const char * FAST_FUNC get_builtin_name(int i) | 8197 | static const char * FAST_FUNC get_builtin_name(int i) |
| 8193 | { | 8198 | { |
| 8194 | if (/*i >= 0 && */ i < ARRAY_SIZE(bltins1)) { | 8199 | if (/*i >= 0 && */ i < ARRAY_SIZE(bltins1)) { |
| @@ -9373,7 +9378,7 @@ static NOINLINE int run_pipe(struct pipe *pi) | |||
| 9373 | } | 9378 | } |
| 9374 | #endif | 9379 | #endif |
| 9375 | debug_printf_env("set shell var:'%s'->'%s'\n", *argv, p); | 9380 | debug_printf_env("set shell var:'%s'->'%s'\n", *argv, p); |
| 9376 | if (set_local_var(p, /*flag:*/ 0)) { | 9381 | if (set_local_var0(p)) { |
| 9377 | /* assignment to readonly var / putenv error? */ | 9382 | /* assignment to readonly var / putenv error? */ |
| 9378 | rcode = 1; | 9383 | rcode = 1; |
| 9379 | } | 9384 | } |
| @@ -9856,7 +9861,7 @@ static int run_list(struct pipe *pi) | |||
| 9856 | } | 9861 | } |
| 9857 | /* Insert next value from for_lcur */ | 9862 | /* Insert next value from for_lcur */ |
| 9858 | /* note: *for_lcur already has quotes removed, $var expanded, etc */ | 9863 | /* note: *for_lcur already has quotes removed, $var expanded, etc */ |
| 9859 | set_local_var(xasprintf("%s=%s", pi->cmds[0].argv[0], *for_lcur++), /*flag:*/ 0); | 9864 | set_local_var_from_halves(pi->cmds[0].argv[0], *for_lcur++); |
| 9860 | continue; | 9865 | continue; |
| 9861 | } | 9866 | } |
| 9862 | if (rword == RES_IN) { | 9867 | if (rword == RES_IN) { |
| @@ -10668,8 +10673,12 @@ int hush_main(int argc, char **argv) | |||
| 10668 | 10673 | ||
| 10669 | # if ENABLE_FEATURE_EDITING | 10674 | # if ENABLE_FEATURE_EDITING |
| 10670 | G.line_input_state = new_line_input_t(FOR_SHELL); | 10675 | G.line_input_state = new_line_input_t(FOR_SHELL); |
| 10676 | # if ENABLE_FEATURE_TAB_COMPLETION | ||
| 10671 | G.line_input_state->get_exe_name = get_builtin_name; | 10677 | G.line_input_state->get_exe_name = get_builtin_name; |
| 10678 | # endif | ||
| 10679 | # if EDITING_HAS_sh_get_var | ||
| 10672 | G.line_input_state->sh_get_var = get_local_var_value; | 10680 | G.line_input_state->sh_get_var = get_local_var_value; |
| 10681 | # endif | ||
| 10673 | # endif | 10682 | # endif |
| 10674 | # if ENABLE_HUSH_SAVEHISTORY && MAX_HISTORY > 0 | 10683 | # if ENABLE_HUSH_SAVEHISTORY && MAX_HISTORY > 0 |
| 10675 | { | 10684 | { |
