aboutsummaryrefslogtreecommitdiff
path: root/shell (follow)
Commit message (Collapse)AuthorAgeFilesLines
* hush: fix handling of "cmd && &"Denys Vlasenko2021-11-231-1/+5
| | | | | | | | function old new delta done_pipe 213 231 +18 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> (cherry picked from commit 83a4967e50422867f340328d404994553e56b839)
* hush: fix handling of \^C and "^C"Denys Vlasenko2021-11-239-0/+23
| | | | | | | | | | | function old new delta parse_stream 2238 2252 +14 encode_string 243 256 +13 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 27/0) Total: 27 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> (cherry picked from commit 1b7a9b68d0e9aa19147d7fda16eb9a6b54156985)
* ash: parser: Fix VSLENGTH parsing with trailing garbageDenys Vlasenko2021-11-231-6/+3
| | | | | | | | Let's adopt Herbert Xu's patch, not waiting for it to reach dash git: hush already has a similar fix. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> (cherry picked from commit 53a7a9cd8c15d64fcc2278cf8981ba526dfbe0d2)
* ash: fix ${unset_var/pattern/repl}Denys Vlasenko2021-05-033-1/+5
| | | | | | | function old new delta subevalvar 1349 1353 +4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash: make a strdup copy of $HISTFILE for line editingDenys Vlasenko2021-03-091-2/+2
| | | | | | | | | Otherwise if $HISTFILE is unset or reassigned, bad things can happen. function old new delta ash_main 1210 1218 +8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* randomconfig fixesDenys Vlasenko2020-12-291-1/+3
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: make comment more clearDenys Vlasenko2020-12-271-4/+5
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* typo fixDenys Vlasenko2020-12-252-2/+2
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: fix this case: echo "SCRIPT" | hushDenys Vlasenko2020-12-255-1/+15
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: if !EDITING, do not regenerate prompt for every input charDenys Vlasenko2020-12-251-5/+12
| | | | | | | | | | function old new delta fgetc_interactive 261 258 -3 pseudo_exec_argv 406 399 -7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-10) Total: -10 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash: change "clear ungetc counter on syntax errors" fix to match dashDenys Vlasenko2020-12-241-2/+1
| | | | | | | | | | function old new delta ash_main 1203 1210 +7 raise_exception 39 26 -13 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 7/-13) Total: -6 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: fix ^C in INTERACTIVE, !EDITING configDenys Vlasenko2020-12-231-6/+29
| | | | | | | | | | function old new delta refill_HFILE_and_getc 88 170 +82 fgetc_interactive 226 250 +24 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 106/0) Total: 106 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: revert "make interactive ^C break out of PS2 mode"Denys Vlasenko2020-12-231-22/+3
| | | | | | | | | | | | | | | | | It made ^C break out of the entire shell, if we aren't in PS2 mode. Need a better idea. function old new delta expand_one_var 2344 2353 +9 syntax_error_unterm_ch 21 29 +8 parse_dollar 817 824 +7 parse_stream 2251 2238 -13 fgetc_interactive 249 227 -22 syntax_error_unterm_str 26 - -26 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 3/2 up/down: 24/-61) Total: -37 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: fix PS1 prompth in !EDITING configDenys Vlasenko2020-12-231-3/+3
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: fix fallout from tweaking ${var:START:LEN} codeDenys Vlasenko2020-12-233-1/+4
| | | | | | | function old new delta expand_one_var 2344 2353 +9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* shell: for signal exitcode, use 128 | sig, not 128 + sig - MIPS has signal 128Denys Vlasenko2020-12-232-16/+18
| | | | | | | | | | | | | | | function old new delta wait_for_child_or_signal 213 214 +1 refill_HFILE_and_getc 89 88 -1 getstatus 97 96 -1 builtin_wait 339 337 -2 checkjobs 187 183 -4 process_wait_result 450 444 -6 waitcmd 290 281 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/6 up/down: 1/-23) Total: -22 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: fix commentDenys Vlasenko2020-12-231-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: do not allocate line editing state until neededDenys Vlasenko2020-12-212-4/+2
| | | | | | | | | | | function old new delta xc_read_line 324 353 +29 free_line_input_t 34 39 +5 xc_vm_init 656 640 -16 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 34/-16) Total: 18 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: deal with FIXMEs for corner cases in parameter expansionDenys Vlasenko2020-12-211-18/+34
| | | | | | | function old new delta expand_one_var 2323 2344 +21 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: remove one redundant getpid() on every startupDenys Vlasenko2020-12-201-8/+6
| | | | | | | function old new delta hush_main 1151 1147 -4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash: clear ungetc counter on syntax errorsDenys Vlasenko2020-12-191-55/+57
| | | | | | | function old new delta raise_exception 26 39 +13 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* shells: a fix for systems without RLIMIT_NICEDenys Vlasenko2020-12-171-3/+16
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: code shrinkDenys Vlasenko2020-12-141-1/+1
| | | | | | | | | | | | | function old new delta run_applet_main - 20 +20 builtin_kill 296 288 -8 builtin_test 19 10 -9 builtin_printf 19 10 -9 builtin_echo 19 10 -9 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/4 up/down: 20/-35) Total: -15 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: if login shell, also source ~/.profileDenys Vlasenko2020-12-131-8/+16
| | | | | | | function old new delta hush_main 1101 1151 +50 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: NOMMU fix for hush-psubst/tick6.testsDenys Vlasenko2020-12-131-0/+7
| | | | | | | function old new delta hush_main 1759 1766 +7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: fix -c SCRIPT handlingDenys Vlasenko2020-12-131-51/+63
| | | | | | | function old new delta hush_main 1763 1759 -4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash: reset SIGHUP earlier: allows HUP traps in .profile, closes 13371Denys Vlasenko2020-12-131-8/+11
| | | | | | | function old new delta ash_main 1188 1203 +15 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* decrease paddign: gcc-9.3.1 slaps 32-byte alignment on arrays willy-nillyDenys Vlasenko2020-11-303-10/+10
| | | | | | | | text data bss dec hex filename 1021988 559 5052 1027599 fae0f busybox_old 1021236 559 5052 1026847 fab1f busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* fix warning: label 'out1' defined but not usedCristian Ionescu-Idbohrn2020-11-191-0/+2
| | | | | Signed-off-by: Cristian Ionescu-Idbohrn <cristian.ionescu-idbohrn@axis.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash: make interactive ^C break out of PS2 modeDenys Vlasenko2020-11-161-4/+3
| | | | | | | | | Based on patch by Joachim Nilsson <troglobit@gmail.com> function old new delta pgetc 570 547 -23 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: make interactive ^C break out of PS2 modeDenys Vlasenko2020-11-161-35/+51
| | | | | | | | | | | | | function old new delta syntax_error_unterm_str - 26 +26 parse_stream 2238 2251 +13 fgetc_interactive 243 249 +6 parse_dollar 824 817 -7 syntax_error_unterm_ch 29 21 -8 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/2 up/down: 45/-15) Total: 30 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: document bugs in [[ =~ ]] comparisonDenys Vlasenko2020-11-014-0/+28
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* shell: update comments on the status of [[ ]] compatDenys Vlasenko2020-10-312-5/+4
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: add tests for unquoted < > in [[ ]]Denys Vlasenko2020-10-312-0/+5
| | | | | | They pass. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* shell: better support of [[ ]] bashismDenys Vlasenko2020-10-3112-24/+127
| | | | | | | | | | | | | | | | | | Still rather rudimentary for ash function old new delta binop 433 589 +156 check_operator 65 101 +36 done_word 736 769 +33 test_main 405 418 +13 parse_stream 2227 2238 +11 ops_texts 124 133 +9 ops_table 80 86 +6 run_pipe 1557 1562 +5 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 8/0 up/down: 269/0) Total: 269 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: output bash-compat killing signal namesDenys Vlasenko2020-10-249-7/+92
| | | | | | | | | This significantly syncronises ash-signals and hush-signals tests. function old new delta process_wait_result 449 450 +1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hush: do not print killing signal name in `cmd_whihc_dies_on_signal`Denys Vlasenko2020-10-243-1/+9
| | | | | | | function old new delta process_wait_result 438 449 +11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* avoid using strok - eliminates use of hidden global variableDenys Vlasenko2020-10-061-2/+2
| | | | | | | | | | | | | | | | | | function old new delta udhcp_str2optset 616 650 +34 setpriv_main 950 975 +25 switch_root_main 688 706 +18 parse 958 970 +12 getopt_main 622 628 +6 parse_resolvconf 302 306 +4 mpstat_main 1139 1142 +3 static.p 4 - -4 cdcmd 717 702 -15 strtok 148 - -148 ------------------------------------------------------------------------------ (add/remove: 0/3 grow/shrink: 7/1 up/down: 102/-167) Total: -65 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* shell: remove FAST_FUNC from a static functionDenys Vlasenko2020-10-011-2/+2
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* shell: add testsuite for "wait $pid" waiting for other tasksDenys Vlasenko2020-09-294-0/+18
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash: jobs: Fix waitcmd busy loopDenys Vlasenko2020-09-291-57/+34
| | | | | | | | | | | | | | | | | | | | | | | | Upstream commit: Date: Tue, 2 Jun 2020 23:46:48 +1000 jobs: Fix waitcmd busy loop We need to clear gotsigchld in waitproc because it is used as a loop conditional for the waitcmd case. Without it waitcmd may busy loop after a SIGCHLD. This patch also changes gotsigchld into a volatile sig_atomic_t to prevent compilers from optimising its accesses away. Fixes: 6c691b3e5099 ("jobs: Only clear gotsigchld when waiting...") Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> This change also incorporates other changes to bring us closer to upstream. function old new delta dowait 553 636 +83 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash: jobs: Fix infinite loop in waitprocDenys Vlasenko2020-09-291-6/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Upstream commit: Date: Fri, 10 Apr 2020 21:03:09 +1000 jobs: Fix infinite loop in waitproc After we changed the resetting of gotsigchld so that it is only done if jp is NULL, we can now get an infinite loop in waitproc if gotsigchld is set but there is no outstanding child because everything had been waited for previously without gotsigchld being zeroed. This patch fixes it by always zeroing gotsigchld as we did before. The bug that the previous patch was trying to fix is now resolved by switching the blocking mode to DOWAIT_NORMAL after the specified job has been completed so that we really do wait for all outstanding dead children. Reported-by: Harald van Dijk <harald@gigawatt.nl> Fixes: 6c691b3e5099 ("jobs: Only clear gotsigchld when waiting...") Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> function old new delta dowait 553 631 +78 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash: remove a tentative TODO, it's a wrong ideaDenys Vlasenko2020-09-291-1/+1
| | | | | | | | | | Upstream tried it, and then reverted by: From: Herbert Xu <herbert@gondor.apana.org.au> Date: Tue, 26 May 2020 23:19:05 +1000 parser: Fix double-backslash nl in old-style command sub Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* shell: Fix "read -d ''" behaviorChristian Eggers2020-07-315-2/+6
| | | | | | | | | | | | | | With bash's read builtin it is possible to read from a file (e.g. device-tree) until the first '\0' character: IFS= read -r -d '' VARIABLE < file In busybox ash the -d extension is also implemented, but checking the read character for '\0' has to be performed after comparing with the delimiter. Signed-off-by: Christian Eggers <ceggers@arri.de> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* nologin: make it possible to build it as single appletDenys Vlasenko2020-06-243-58/+76
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* suppress a few compile warningsDenys Vlasenko2020-06-241-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash,hush: drop pointer check before calls to show_historyRon Yorston2020-04-302-4/+2
| | | | | | | | | | | | | | show_history() checks that its argument in non-null so there's no need to repeat the test at call sites. function old new delta historycmd 25 17 -8 builtin_history 29 21 -8 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-16) Total: -16 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash: fix build failure when command built-in is disabledRon Yorston2020-04-301-1/+3
| | | | | | | | | | | | | | Since commit 7eb8eecbb (ash: eval: Add assignment built-in support again) building BusyBox with the 'command' built-in disabled fails. parse_command_args() only needs to be called when the 'command' built-in is run. Which it won't be if it's disabled. v2: Avoiding infinite loops is good, too. Thanks, Harald van Dijk. Reported-by: Deweloper <deweloper@wp.pl> Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* shells: fix exitcode_trapN tests to avoid racesDenys Vlasenko2020-02-264-8/+4
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ash: expand: Fix multiple issues with EXP_DISCARD in evalvarDenys Vlasenko2020-02-241-14/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Upstream commit: Date: Wed, 12 Sep 2018 14:27:16 +0800 expand: Fix multiple issues with EXP_DISCARD in evalvar The commit 3cd538634f71538370f5af239f342aec48b7470b broke parameter expansion in multiple ways because the EXP_DISCARD flag wasn't set or tested for various cases: $ src/dash -c 'var=; echo ${var:+nonempty}' nonempty $ src/dash -u -c 'unset foo bar; echo ${foo+${bar}}' dash: 1: bar: parameter not set $ src/dash -c 'foo=bar; echo ${foo=BUG}; echo $foo' barBUG bar $ This patch fixes them by introducing a new discard variable that tracks whether the extra word should be discarded or not when it is parsed. Reported-by: Martijn Dekker <martijn@inlv.org> Fixes: 3cd538634f71 ("expand: Do not reprocess data when...") Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Reported-by: Martijn Dekker <martijn@inlv.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>