diff options
| -rw-r--r-- | shell/hush.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/shell/hush.c b/shell/hush.c index 824a5b52e..d5cea07a1 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
| @@ -2569,7 +2569,7 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg, char | |||
| 2569 | default: /* <SPECIAL_VAR_SYMBOL>varname<SPECIAL_VAR_SYMBOL> */ | 2569 | default: /* <SPECIAL_VAR_SYMBOL>varname<SPECIAL_VAR_SYMBOL> */ |
| 2570 | case_default: { | 2570 | case_default: { |
| 2571 | char *var = arg; | 2571 | char *var = arg; |
| 2572 | bool exp_len; | 2572 | char exp_len; /* '#' if it's ${#var} */ |
| 2573 | char exp_op; | 2573 | char exp_op; |
| 2574 | char exp_save = exp_save; /* for compiler */ | 2574 | char exp_save = exp_save; /* for compiler */ |
| 2575 | char *exp_saveptr = exp_saveptr; /* points to expansion operator */ | 2575 | char *exp_saveptr = exp_saveptr; /* points to expansion operator */ |
| @@ -2579,12 +2579,11 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg, char | |||
| 2579 | arg[0] = first_ch & 0x7f; | 2579 | arg[0] = first_ch & 0x7f; |
| 2580 | 2580 | ||
| 2581 | /* prepare for expansions */ | 2581 | /* prepare for expansions */ |
| 2582 | exp_len = false; | ||
| 2583 | exp_op = 0; | 2582 | exp_op = 0; |
| 2584 | if (var[0] == '#') { | 2583 | exp_len = var[0]; |
| 2584 | if (exp_len == '#') { | ||
| 2585 | /* handle length expansion ${#var} */ | 2585 | /* handle length expansion ${#var} */ |
| 2586 | exp_len = true; | 2586 | var++; |
| 2587 | ++var; | ||
| 2588 | } else { | 2587 | } else { |
| 2589 | /* maybe handle parameter expansion */ | 2588 | /* maybe handle parameter expansion */ |
| 2590 | exp_saveptr = var + strcspn(var, ":-=+?%#"); | 2589 | exp_saveptr = var + strcspn(var, ":-=+?%#"); |
| @@ -2609,8 +2608,8 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg, char | |||
| 2609 | val = get_local_var_value(var); | 2608 | val = get_local_var_value(var); |
| 2610 | 2609 | ||
| 2611 | /* handle any expansions */ | 2610 | /* handle any expansions */ |
| 2612 | if (exp_len) { | 2611 | if (exp_len == '#') { |
| 2613 | debug_printf_expand("expand: length of '%s' = ", val); | 2612 | debug_printf_expand("expand: length(%s)=", val); |
| 2614 | val = utoa(val ? strlen(val) : 0); | 2613 | val = utoa(val ? strlen(val) : 0); |
| 2615 | debug_printf_expand("%s\n", val); | 2614 | debug_printf_expand("%s\n", val); |
| 2616 | } else if (exp_op) { | 2615 | } else if (exp_op) { |
