diff options
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/shell/hush.c b/shell/hush.c index d3dab5863..4f80b7d83 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
@@ -2829,23 +2829,21 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg, char | |||
2829 | * Then var's value is matched to it and matching part removed. | 2829 | * Then var's value is matched to it and matching part removed. |
2830 | */ | 2830 | */ |
2831 | if (val) { | 2831 | if (val) { |
2832 | bool match_at_left; | 2832 | char *exp_exp_word; |
2833 | char *loc; | 2833 | char *loc; |
2834 | scan_t scan = pick_scan(exp_op, *exp_word, &match_at_left); | 2834 | unsigned scan_flags = pick_scan(exp_op, *exp_word); |
2835 | if (exp_op == *exp_word) /* ## or %% */ | 2835 | if (exp_op == *exp_word) /* ## or %% */ |
2836 | exp_word++; | 2836 | exp_word++; |
2837 | val = to_be_freed = xstrdup(val); | 2837 | val = to_be_freed = xstrdup(val); |
2838 | { | 2838 | exp_exp_word = expand_pseudo_dquoted(exp_word); |
2839 | char *exp_exp_word = expand_pseudo_dquoted(exp_word); | 2839 | if (exp_exp_word) |
2840 | if (exp_exp_word) | 2840 | exp_word = exp_exp_word; |
2841 | exp_word = exp_exp_word; | 2841 | loc = scan_and_match(to_be_freed, exp_word, scan_flags); |
2842 | loc = scan(to_be_freed, exp_word, match_at_left); | 2842 | //bb_error_msg("op:%c str:'%s' pat:'%s' res:'%s'", |
2843 | //bb_error_msg("op:%c str:'%s' pat:'%s' res:'%s'", | 2843 | // exp_op, to_be_freed, exp_word, loc); |
2844 | // exp_op, to_be_freed, exp_word, loc); | 2844 | free(exp_exp_word); |
2845 | free(exp_exp_word); | ||
2846 | } | ||
2847 | if (loc) { /* match was found */ | 2845 | if (loc) { /* match was found */ |
2848 | if (match_at_left) /* # or ## */ | 2846 | if (scan_flags & SCAN_MATCH_LEFT_HALF) /* # or ## */ |
2849 | val = loc; | 2847 | val = loc; |
2850 | else /* % or %% */ | 2848 | else /* % or %% */ |
2851 | *loc = '\0'; | 2849 | *loc = '\0'; |