summaryrefslogtreecommitdiff
path: root/shell/hush.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-03-02 18:12:12 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-03-02 18:12:12 +0100
commit55f8133a4fb207d6fecd02f43c36809d3c2f6672 (patch)
tree5f57cd305d494a914980022bb6767b2e8faaf676 /shell/hush.c
parent744a20d8f9b1baf7c8cc1ed33ec744a52c89768f (diff)
downloadbusybox-w32-55f8133a4fb207d6fecd02f43c36809d3c2f6672.tar.gz
busybox-w32-55f8133a4fb207d6fecd02f43c36809d3c2f6672.tar.bz2
busybox-w32-55f8133a4fb207d6fecd02f43c36809d3c2f6672.zip
shell: tweak bkslash_in_varexp.tests, add bkslash_in_varexp1.tests
It turns out bkslash_in_varexp.tests was a bash bug :] ash and hush fail "corrected" bkslash_in_varexp.tests as well, just not as badly as I thought (hush gets half of the cases right). Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell/hush.c')
-rw-r--r--shell/hush.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/shell/hush.c b/shell/hush.c
index e005b0a20..da4967a8a 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -4488,7 +4488,7 @@ static int add_till_closing_bracket(o_string *dest, struct in_str *input, unsign
4488 } 4488 }
4489 if (ch == end_ch 4489 if (ch == end_ch
4490# if BASH_SUBSTR || BASH_PATTERN_SUBST 4490# if BASH_SUBSTR || BASH_PATTERN_SUBST
4491 || ch == end_char2 4491 || ch == end_char2
4492# endif 4492# endif
4493 ) { 4493 ) {
4494 if (!dbl) 4494 if (!dbl)
@@ -5842,17 +5842,18 @@ static NOINLINE const char *expand_one_var(char **to_be_freed_pp, char *arg, cha
5842 unsigned scan_flags = pick_scan(exp_op, *exp_word); 5842 unsigned scan_flags = pick_scan(exp_op, *exp_word);
5843 if (exp_op == *exp_word) /* ## or %% */ 5843 if (exp_op == *exp_word) /* ## or %% */
5844 exp_word++; 5844 exp_word++;
5845 debug_printf_expand("expand: exp_word:'%s'\n", exp_word);
5845 exp_exp_word = encode_then_expand_string(exp_word, /*process_bkslash:*/ 1, /*unbackslash:*/ 1); 5846 exp_exp_word = encode_then_expand_string(exp_word, /*process_bkslash:*/ 1, /*unbackslash:*/ 1);
5846 if (exp_exp_word) 5847 if (exp_exp_word)
5847 exp_word = exp_exp_word; 5848 exp_word = exp_exp_word;
5849 debug_printf_expand("expand: exp_exp_word:'%s'\n", exp_word);
5848 /* HACK ALERT. We depend here on the fact that 5850 /* HACK ALERT. We depend here on the fact that
5849 * G.global_argv and results of utoa and get_local_var_value 5851 * G.global_argv and results of utoa and get_local_var_value
5850 * are actually in writable memory: 5852 * are actually in writable memory:
5851 * scan_and_match momentarily stores NULs there. */ 5853 * scan_and_match momentarily stores NULs there. */
5852 t = (char*)val; 5854 t = (char*)val;
5853 loc = scan_and_match(t, exp_word, scan_flags); 5855 loc = scan_and_match(t, exp_word, scan_flags);
5854 //bb_error_msg("op:%c str:'%s' pat:'%s' res:'%s'", 5856 debug_printf_expand("op:%c str:'%s' pat:'%s' res:'%s'\n", exp_op, t, exp_word, loc);
5855 // exp_op, t, exp_word, loc);
5856 free(exp_exp_word); 5857 free(exp_exp_word);
5857 if (loc) { /* match was found */ 5858 if (loc) { /* match was found */
5858 if (scan_flags & SCAN_MATCH_LEFT_HALF) /* #[#] */ 5859 if (scan_flags & SCAN_MATCH_LEFT_HALF) /* #[#] */