aboutsummaryrefslogtreecommitdiff
path: root/shell/hush.c
AgeCommit message (Collapse)Author
2018-07-20hush: tidy up code after previous commitsDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-20hush: better names for o_free_unsafe() / o_free(), no logic changesDenys Vlasenko
o_free() made o_string NULL-initialized, o_free_unsafe() did not bother reinitializing (expected caller to not need it). Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-20hush: fix handling of '' in ${var:+ARG}Denys Vlasenko
This wasn't an ash bug in dollar_altvalue9, it was hush bug (and bash!) function old new delta expand_one_var 2236 2254 +18 expand_vars_to_list 1097 1103 +6 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 24/0) Total: 24 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-20hush: fix word splitting in ${v:+ARG} - dollar_altvalue1 testDenys Vlasenko
ash might be a bit buggy, need to investigate dollar_altvalue9 test function old new delta expand_one_var 1639 2236 +597 expand_variables 112 128 +16 expand_vars_to_list 1117 1097 -20 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 613/-20) Total: 593 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-20hush: expand_vars_to_list() should not assume it starts new wordDenys Vlasenko
function old new delta expand_variables 112 115 +3 expand_vars_to_list 1117 1108 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 3/-9) Total: -6 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-20hush: remove pointless "next" var, simplify expand_vars_to_list()Denys Vlasenko
function old new delta o_addstr - 26 +26 expand_vars_to_list 1112 1117 +5 encode_then_expand_vararg 398 382 -16 parse_dollar 779 762 -17 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/2 up/down: 31/-33) Total: -2 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-20hush: store "ended_in_ifs" flag in o_stringDenys Vlasenko
This simplifies function parameter passing. function old new delta expand_one_var 1643 1639 -4 append_str_maybe_ifs_split 64 52 -12 expand_vars_to_list 1125 1112 -13 expand_on_ifs 361 345 -16 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-45) Total: -45 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-20hush: propagate (output,n) parameters into expand_one_var()Denys Vlasenko
This is necessary since expand_one_var() for ${var:+ARG} must create more than one output word, and thus can't simply return a char*. function old new delta expand_one_var 1610 1643 +33 expand_vars_to_list 1139 1125 -14 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 33/-14) Total: 19 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-20hush: make expand_vars_to_list() a bit more saneDenys Vlasenko
function old new delta append_str_maybe_ifs_split - 64 +64 expand_vars_to_list 1167 1139 -28 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/1 up/down: 64/-28) Total: 36 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-18hush: reduce indentation, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-18hush: fix 'x=; echo ${x:-"$@"}' producing 'BUG in varexp2' messageDenys Vlasenko
function old new delta expand_string_to_string 126 128 +2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-18hush: smaller code to set o_string to ""Denys Vlasenko
function old new delta encode_then_expand_vararg 399 398 -1 parse_stream 2753 2748 -5 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-17whitespace fixesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-17hush: faster/smaller code to check for presense of multiple chars in stringDenys Vlasenko
Go over the string only once. function old new delta encode_then_expand_string 126 105 -21 encode_then_expand_vararg 443 399 -44 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-65) Total: -65 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-17hush: improve ${var#...}, ${var:+...} and ${var/.../...} - handle quotingDenys Vlasenko
dollar_altvalue1 test partially fails: word splitting of unquoted ${var:+...} is not correct function old new delta encode_then_expand_vararg - 443 +443 expand_one_var 1599 1610 +11 parse_stream 2756 2753 -3 encode_string 250 242 -8 setup_heredoc 308 298 -10 expand_and_evaluate_arith 106 96 -10 encode_then_expand_string 142 126 -16 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/5 up/down: 454/-47) Total: 407 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-15hush: shrink code in builtin_evalDenys Vlasenko
function old new delta builtin_eval 126 119 -7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-06-26hush: unset_local_var_len is only used by unset_local_varDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-06-26hush: fix compile problem found by randomconfigDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-06-26hush: fix dup_CLOEXEC() call without "avoid_fd" parameterDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-06-26hush: fix for !ENABLE_HUSH_MODE_X configurationDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-06-26hush: variable nesting code is used also if HUSH_FUNCTIONS is not enabledDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-06-26randomconfig fixesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-11hush: fix recent breakage from parse_stream() changesDenys Vlasenko
function old new delta parse_stream 3808 3821 +13 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-11hush: IFS fixesDenys Vlasenko
$ IFS=": "; x=" "; set x $x; for v; do echo "|$v|"; done |x| $ IFS=": "; x=":"; set x $x; for v; do echo "|$v|"; done |x| || function old new delta run_pipe 1789 1870 +81 expand_on_ifs 310 361 +51 pseudo_exec_argv 588 591 +3 builtin_local 50 53 +3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/0 up/down: 138/0) Total: 138 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-11hush: fix "$v" expansion in case patterns when v='[a]'Denys Vlasenko
function old new delta run_list 1053 1063 +10 setup_redirects 311 320 +9 encode_then_expand_string 135 142 +7 run_pipe 1784 1789 +5 expand_assignments 81 86 +5 expand_string_to_string 124 125 +1 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 6/0 up/down: 37/0) Total: 37 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-11hush: optimize parse_stream()Denys Vlasenko
Since we check for '\' anyway when we determine whether we can look ahead, we can just check for *and handle* it there. function old new delta parse_stream 2751 2740 -11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-11hush: do not drop backslash from eval 'echo ok\'Denys Vlasenko
newer bash does not drop it, most other shells too function old new delta unbackslash 39 57 +18 parse_stream 2753 2751 -2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 18/-2) Total: 16 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-10shell: add comments about [[, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-10hush: fix handling of \<eof> in double-quoted stringsDenys Vlasenko
function old new delta encode_string 268 250 -18 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-10hush: fix eval 'echo ok\'Denys Vlasenko
function old new delta parse_stream 2762 2753 -9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-10hush: simplify \<newline> code, part 3Denys Vlasenko
function old new delta parse_stream 2780 2762 -18 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-10hush: simplify \<newline> code, part 2Denys Vlasenko
function old new delta parse_stream 2787 2780 -7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-10hush: simplify \<newline> code, part 1Denys Vlasenko
function old new delta parse_stream 2919 2787 -132 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-10hush: put "current word" structure into parsing contextDenys Vlasenko
function old new delta done_word 790 767 -23 parse_stream 3018 2919 -99 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-122) Total: -122 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-09hush: fix var_leaks.tests and var_preserved.tests on NOMMUDenys Vlasenko
function old new delta remove_nested_vars - 77 +77 run_pipe 1756 1786 +30 pseudo_exec_argv 376 379 +3 leave_var_nest_level 98 32 -66 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/1 up/down: 110/-66) Total: 44 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-09hush: fix func_return2.tests on NOMMUDenys Vlasenko
function old new delta hush_main 1714 1718 +4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-07hush: fix prompt in multi-line $(())Denys Vlasenko
Now shows PS2 in this case: /path/to/dir $ a=b; echo $(( > _ Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-06hush: fix "unset PS1/PS2", and put them into initial variable setDenys Vlasenko
"unset PS1/PS2" causes prompts to be empty strings function old new delta hush_main 1031 1089 +58 goto_new_line 27 33 +6 fgetc_interactive 244 245 +1 unset_local_var 155 149 -6 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/1 up/down: 65/-6) Total: 59 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-06hush: if we did match "LINENO" or "OPTIND", stop further comparisonsDenys Vlasenko
function old new delta handle_changed_special_names 99 101 +2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-06hush: consolidate handling of setting/unsetting of PSn, LINENO, OPTINDDenys Vlasenko
function old new delta handle_changed_special_names - 99 +99 unset_local_var 256 155 -101 set_local_var 557 437 -120 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/2 up/down: 99/-221) Total: -122 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-05hush: update to correctly handle changed var_bash[346].testsDenys Vlasenko
function old new delta expand_one_var 1612 1604 -8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-05hush: implement "hush -s"Denys Vlasenko
function old new delta hush_main 1015 1031 +16 packed_usage 32757 32745 -12 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 16/-12) Total: 4 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-05hush: fix a few more corner cases with empty-expanding `cmds`Denys Vlasenko
See added testcases function old new delta run_pipe 1723 1784 +61 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-05hush: fix corner cases with exec in empty expansionsDenys Vlasenko
Cases like these: var=val exec >redir var=val `` >redir function old new delta run_pipe 1701 1723 +22 redirect_and_varexp_helper 56 55 -1 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 22/-1) Total: 21 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-05hush: less mind-bending set_vars_and_save_old()Denys Vlasenko
function old new delta run_pipe 1651 1701 +50 set_local_var 510 557 +47 pseudo_exec_argv 544 581 +37 redirect_and_varexp_helper 64 56 -8 set_vars_and_save_old 164 149 -15 unset_local_var 274 256 -18 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/3 up/down: 134/-41) Total: 93 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-05hush: "no logic changes" in last commit was not true, fix it upDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-05hush: make run_pipe code simpler to understand, no logic changesDenys Vlasenko
function old new delta run_pipe 1641 1651 +10 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-05hush: fix a bug where we don't properly handle f() { a=A; b=B; }; a= fDenys Vlasenko
function old new delta unset_local_var 20 274 +254 leave_var_nest_level - 98 +98 set_vars_and_save_old 128 164 +36 enter_var_nest_level - 32 +32 builtin_local 46 50 +4 pseudo_exec_argv 554 544 -10 redirect_and_varexp_helper 77 64 -13 run_pipe 1890 1641 -249 unset_local_var_len 267 - -267 ------------------------------------------------------------------------------ (add/remove: 2/1 grow/shrink: 3/3 up/down: 424/-539) Total: -115 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-04hush: make var nesting code independent of "local" supportDenys Vlasenko
Also, add code to abort at ~65000 function recursion depth. SEGVing is not as nice as exiting with a message (and restoring termios!): $ f() { echo -n .; f; }; f ....<many dots later>....hush: fatal recursion (depth 65281) function old new delta run_pipe 1826 1890 +64 pseudo_exec_argv 544 554 +10 parse_and_run_file 71 80 +9 i_getch 104 107 +3 done_command 99 102 +3 set_local_var 508 510 +2 helper_export_local 214 215 +1 builtin_local 49 46 -3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 7/1 up/down: 92/-3) Total: 89 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-04hush: fix for readonly vars in "ro=A ro=B cmd" caseDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>