aboutsummaryrefslogtreecommitdiff
path: root/shell (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
| * ash: use pgetc_eatbnl() in more places, take 3Denys Vlasenko2021-09-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adding previously skipped "readtoken1(pgetc_eatbnl(), syntax_type..." change from upstream commit: Date: Thu Mar 8 08:37:11 2018 +0100 parser: use pgetc_eatbnl() in more places dash has a pgetc_eatbnl function in parser.c which skips any backslash-newline combinations. It's not used everywhere it could be. There is also some duplicated backslash-newline handling elsewhere in parser.c. Replace most of the calls to pgetc() with calls to pgetc_eatbnl() and remove the duplicated backslash-newline handling. Testcase: PS1='\ :::' should result in ::: prompt, not <newline>::: prompt Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: parser: Save and restore heredoclist in expandstrDenys Vlasenko2021-09-081-8/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Upstream commit: Date: Sun, 17 May 2020 23:36:25 +1000 parser: Save and restore heredoclist in expandstr On Sun, May 17, 2020 at 01:19:28PM +0100, Harald van Dijk wrote: > This still does not restore the state completely. It does not clean up any > pending heredocs. I see: > > $ PS1='$(<<EOF "' > src/dash: 1: Syntax error: Unterminated quoted string > $(<<EOF ": > > > > That is, after entering the ':' command, the shell is still trying to read > the heredoc from the prompt. This patch saves and restores the heredoclist in expandstr. It also removes a bunch of unnecessary volatiles as those variables are only referenced in case of a longjmp other than one started by a signal like SIGINT. function old new delta expandstr 268 255 -13 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: parser: Fix handling of empty aliasesDenys Vlasenko2021-09-081-21/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Upstream commit: Date: Tue, 28 Apr 2020 01:15:26 +1000 parser: Fix handling of empty aliases Dash was incorrectly handling empty aliases. When attempting to use an empty alias with nothing else, I'm (incorrectly) prompted for more input: ``` $ alias empty='' $ empty > ``` Other shells (e.g., bash, yash) correctly handle the lone, empty alias as an empty command: ``` $ alias empty='' $ empty $ ``` The problem here is that we incorrectly enter the loop eating TNLs in readtoken(). This patch fixes it by setting checkkwd correctly. function old new delta list 351 355 +4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: fix var_LINENO3.tests failureDenys Vlasenko2021-09-071-2/+8
| | | | | | | | | | | | | | | | | | | | function old new delta parse_and_run_string 40 62 +22 i_getch 105 102 -3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 22/-3) Total: 19 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * shell/ash_test/run-all: unset locale/language variablesDenys Vlasenko2021-09-071-1/+10
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: LINENO starts from 0 in -c SCRIPT modeDenys Vlasenko2021-09-0717-41/+49
| | | | | | | | | | | | The var_LINENO3.tests fails for hush: it does start from 0, but does not increment. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: fix LINENO in functionsDenys Vlasenko2021-09-075-12/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | From larger patch by Roberto A. Foglietta <roberto.foglietta@gmail.com> function old new delta evalfun 348 369 +21 ash_main 1202 1218 +16 setinputstring 65 73 +8 lookupvar 116 106 -10 evaltree 772 753 -19 evalsubshell 192 173 -19 evalfor 175 156 -19 evalcase 273 254 -19 evalcommand 1560 1536 -24 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/6 up/down: 45/-110) Total: -65 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: support testsuite for !FEATURE_SUID_CONFIG_QUIET configsDenys Vlasenko2021-09-071-1/+2
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: fix set -n to act immediately, not just after run_list()Denys Vlasenko2021-09-076-3/+21
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: eval: Do not cache value of eflag in evaltreeDenys Vlasenko2021-09-073-8/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Upsteam commit: Date: Mon, 17 May 2021 15:19:23 +0800 eval: Do not cache value of eflag in evaltree Patrick BrĂ¼nn <P.Bruenn@beckhoff.com> wrote: > Since we are migrating to Debian bullseye, we discovered a new behavior > with our scripts, which look like this: >>cleanup() { >> set +e >> rmdir "" >>} >>set -eu >>trap 'cleanup' EXIT INT TERM >>echo 'Hello world!' > > With old dash v0.5.10.2 this script would return 0 as we expected it. > But since commit 62cf6955f8abe875752d7163f6f3adbc7e49ebae it returns > the last exit code of our cleanup function. ... Thanks for the report. This is actually a fairly old bug with set -e that's just been exposed by the exit status change. What's really happening is that cleanup itself is triggering a set -e exit incorrectly because evaltree cached the value of eflag prior to the function call. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: eval: Check nflag in evaltree instead of cmdloopDenys Vlasenko2021-09-073-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | Upstream commit: Date: Thu, 4 Jun 2020 21:53:55 +1000 eval: Check nflag in evaltree instead of cmdloop This patch moves the nflag check from cmdloop into evaltree. This is so that nflag will be in force even if we enter the shell via a path other than cmdloop, e.g., through sh -c. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: add bash-like ERR trap and set -ERoberto A. Foglietta2021-09-071-17/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While at it, stop incrementing LINENO inside traps function old new delta evaltree 567 762 +195 evalfun 268 348 +80 trapcmd 286 333 +47 dotrap 129 157 +28 exitshell 120 139 +19 readtoken1 3096 3110 +14 nlprompt 25 39 +14 nlnoprompt 19 33 +14 .rodata 104245 104255 +10 forkchild 610 617 +7 optletters_optnames 64 68 +4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 11/0 up/down: 432/0) Total: 432 bytes Signed-off-by: Roberto A. Foglietta <roberto.foglietta@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: regressions in process substitutionRon Yorston2021-09-021-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Stacy Harper reports that this script: test() { . /tmp/bb_test; } echo "export TEST=foo" >/tmp/bb_test test 2>/dev/null echo "$TEST" correctly prints 'foo' in BusyBox 1.33 but hangs in 1.34. Bisection suggested the problem was caused by commit a1b0d3856 (ash: add process substitution in bash-compatibility mode). Removing the call to unwindredir() in cmdloop() introduced in that commit makes the script work again. Additionally, these examples of process substitution: while true; do cat <(echo hi); done f() { while true; do cat <(echo hi); done } f result in running out of file descriptors. This is a regression from v5 of the process substitution patch caused by changes to evalcommand() not being transferred to v6. function old new delta static.pushredir - 99 +99 evalcommand 1729 1750 +21 exitreset 69 86 +17 cmdloop 372 365 -7 unwindredir 28 - -28 pushredir 112 - -112 ------------------------------------------------------------------------------ (add/remove: 1/2 grow/shrink: 2/1 up/down: 137/-147) Total: -10 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | ash: code shrink ps_cmdRon Yorston2021-09-081-6/+12
| | | | | | | | | | | | | | The ps_cmd member of struct procstat isn't used in the WIN32 port. Remove references to it. Saves 80 bytes.
* | ash: code shrinkRon Yorston2021-09-051-10/+6
| | | | | | | | | | | | Tweak the code to handle /etc/profile. Looks tidier and saves 8 bytes.
* | ash: restrict valid job idsRon Yorston2021-09-051-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | Although job control is disabled in busybox-w32 getjob() is still compiled in because it's used by waitcmd(). Job ids of the form '%string' or '%?string' don't work, though, because the command isn't stored in the job structure. Disable the code to handle them. Job ids '%%', '%+', '%-' and '%num' are still allowed and some of them are (successfully) used in the ash tests. Saves 144 bytes.
* | ash: omit handling of stopped jobsRon Yorston2021-09-051-1/+10
| | | | | | | | | | | | | | Since Windows doesn't really know about stopped jobs don't bother to compile some code that deals with them. Saves 120 bytes.
* | Merge branch 'busybox' into mergeRon Yorston2021-08-1724-20/+248
|\|
| * hush: fix "error: invalid preprocessing directive ##"Denys Vlasenko2021-08-151-1/+1
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: tweak ${var/pattern/repl} optimizationDenys Vlasenko2021-07-271-5/+4
| | | | | | | | | | | | | | function old new delta expand_one_var 2507 2502 -5 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: optimize ${var/pattern/repl} for trivial patternsDenys Vlasenko2021-07-272-2/+14
| | | | | | | | | | | | | | function old new delta expand_one_var 2353 2507 +154 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * shell: update psubst testcasesDenys Vlasenko2021-07-278-6/+53
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: add missed "undef"Denys Vlasenko2021-07-271-3/+3
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: implement $'str' bashismDenys Vlasenko2021-07-267-1/+138
| | | | | | | | | | | | | | | | | | | | | | function old new delta parse_dollar_squote - 441 +441 encode_then_expand_vararg 359 380 +21 parse_stream 2252 2271 +19 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/0 up/down: 481/0) Total: 481 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ahell: update testsuiteDenys Vlasenko2021-07-257-3/+33
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: speed up ${v//pattern/repl}Denys Vlasenko2021-07-251-7/+10
| | | | | | | | | | | | | | function old new delta subevalvar 1447 1457 +10 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | ash: reset ANSI emulation at promptRon Yorston2021-08-011-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | It appears that MSYS2/Cygwin applications turn off virtual terminal processing. This caused literal ANSI escape sequences to be echoed in the shell, which assumed the console state it had applied would remain unchanged. Add a call to skip_ansi_emulation(TRUE) before issuing a shell prompt to ensure that the state is correct. GitHub issue #223.
* | win32: code shrink using is_prefixed_with()Ron Yorston2021-07-281-4/+4
| | | | | | | | | | | | | | Use is_prefixed_with() rather than strncmp() in a few places, and the case-insensitive analogues. Saves 96 bytes in 64-bit build, 192 bytes in 32-bit.
* | Merge branch 'busybox' into mergeRon Yorston2021-07-241-3/+27
|\|
| * ash: speed up ${v//pattern/repl} if !ASH_OPTIMIZE_FOR_SIZEDenys Vlasenko2021-07-221-3/+27
| | | | | | | | | | | | | | | | | | | | function old new delta subevalvar 1353 1447 +94 .rodata 104179 104184 +5 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 99/0) Total: 99 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | ash, libbb: don't affect POSIX buildRon Yorston2021-07-131-11/+15
| | | | | | | | | | Tweak code to avoid contamination of the POSIX build. There weren't any adverse effects, but better safe than sorry.
* | ash: tidy code, no functional changeRon Yorston2021-07-121-24/+14
| | | | | | | | | | | | If we know fs_size is nonzero there's no point in having SAVE_PTR2 and SAVE_PTR3 macros. The code is slightly tidier if we only use SAVE_PTR.
* | Merge branch 'busybox' into mergeRon Yorston2021-06-2815-11/+97
|\|
| * ash: parser: Fix VSLENGTH parsing with trailing garbageDenys Vlasenko2021-06-251-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>
| * ash: revert accidental change (should have been separate)Denys Vlasenko2021-06-251-3/+6
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * e2fsprogs/*: remove ioctl calling obfuscationDenys Vlasenko2021-06-231-6/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta change_attributes 326 416 +90 list_attributes 222 248 +26 close_silently 22 - -22 .rodata 103722 103692 -30 fgetsetversion 74 - -74 fgetsetprojid 107 - -107 fgetsetflags 148 - -148 ------------------------------------------------------------------------------ (add/remove: 0/4 grow/shrink: 2/1 up/down: 116/-381) Total: -265 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: fix bkslash+newline handling and number validation in ${NN} and ${#NN}Denys Vlasenko2021-06-196-2/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | Entering "${1a}" into interactive shell was making it exit. function old new delta parse_dollar 824 958 +134 i_getch_and_eat_bkslash_nl - 44 +44 parse_expr 917 938 +21 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/0 up/down: 199/0) Total: 199 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: fix handling of "cmd && &"Denys Vlasenko2021-06-151-1/+5
| | | | | | | | | | | | | | function old new delta done_pipe 213 231 +18 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: fix handling of \^C and "^C"Denys Vlasenko2021-06-159-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>
| * *: more --help tweaksDenys Vlasenko2021-06-152-2/+2
| | | | | | | | | | | | | | function old new delta packed_usage 33552 33541 -11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * *: --help tweaksDenys Vlasenko2021-06-142-2/+2
| | | | | | | | | | | | | | function old new delta packed_usage 33589 33552 -37 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | ash: prevent issue with ctrl-c and echo in loopRon Yorston2021-06-181-0/+23
| | | | | | | | | | | | | | | | | | | | Interrupting a loop like this: while true; do echo hello; done with ctrl-c caused the shell to exit. Turning off interrupts around the calls to echo_main() and printf_main() improves matters, though isn't a complete cure.
* | Merge branch 'busybox' into mergeRon Yorston2021-06-076-29/+356
|\|
| * ash: save Ron's patch from oblivionDenys Vlasenko2021-06-061-0/+135
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * shells: do not allow bare "read" in non-bash compat configsDenys Vlasenko2021-06-063-4/+15
| | | | | | | | | | | | | | | | On Sat, Feb 9, 2019 Cristian Ionescu-Idbohrn wrote: > In my case (at work), I have to watch and prevent people from doing > unportable things. For me, that's a burden. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: add process substitution in bash-compatibility modeRon Yorston2021-06-053-17/+185
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Process substitution is a Korn shell feature that's also available in bash and some other shells. This patch implements process substitution in ash when ASH_BASH_COMPAT is enabled. function old new delta argstr 1386 1522 +136 strtodest - 52 +52 readtoken1 3346 3392 +46 .rodata 183206 183250 +44 unwindredir - 28 +28 cmdloop 365 372 +7 static.spclchars 10 12 +2 cmdputs 380 367 -13 exitreset 86 69 -17 evalcommand 1754 1737 -17 varvalue 675 634 -41 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 5/4 up/down: 315/-88) Total: 227 bytes text data bss dec hex filename 953967 4219 1904 960090 ea65a busybox_old 954192 4219 1904 960315 ea73b busybox_unstripped v2: Replace array of file descriptors with a linked list. Include tests that were unaccountably omitted from v1. v3: Update linked list code to the intended version. v4: Change order of conditional code in cmdputs(). v5: Use existing popredir() mechanism to manage file descriptors. v6: Rebase to latest version of BusyBox ash. Reduce code churn. Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * shell: also do word splitting when -d DELIM is usedEicke Herbertz2021-06-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The original commit 3bef5d89b0 introduced an additional check for an unset `opt_d` before doing word splitting. I'm unsure why it's there in the first place, but the commit message also describes a different behaviour than what -d actually does in bash, while the code mostly does the right thing. `opt_d` sets the line delimiter for read to stop reading and should not affect word splitting. Testcase: $ echo qwe rty | { read -d Z a b; echo a:$a b:$b; } a:qwe b:rty function old new delta shell_builtin_read 1314 1304 -10 Signed-off-by: Eicke Herbertz <wolletd@posteo.de> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | Merge branch 'busybox' into mergeRon Yorston2021-05-141-5/+7
|\|
| * hush: beautify ^D handling to match ash / bashDenys Vlasenko2021-04-131-0/+2
| | | | | | | | | | | | | | function old new delta fgetc_interactive 227 244 +17 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: make LINENO selectable without BASH-COMPATDenys Vlasenko2021-03-101-5/+5
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>