aboutsummaryrefslogtreecommitdiff
path: root/shell/ash.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
| * 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-171-7/+10
|\|
| * 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-281-7/+4
|\|
| * 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>
| * *: more --help tweaksDenys Vlasenko2021-06-151-1/+1
| | | | | | | | | | | | | | function old new delta packed_usage 33552 33541 -11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * *: --help tweaksDenys Vlasenko2021-06-141-1/+1
| | | | | | | | | | | | | | 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-071-24/+167
|\|
| * shells: do not allow bare "read" in non-bash compat configsDenys Vlasenko2021-06-061-0/+4
| | | | | | | | | | | | | | | | 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-051-17/+143
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | ash: correctly identify applet in getopt() error messagesRon Yorston2021-03-021-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | With the default configuration most applets are run from the shell via run_noexec_applet_and_exit(). If the applet runs getopt() and an error is detected the message takes the form: sh: unknown option -- q This happens because mingw-w64's implementation of getopt() uses the global variable __argv[0] as the name of the program. Avoid the misleading message by setting __argv[0] as appropriate.
* | Merge branch 'busybox' into mergeRon Yorston2021-03-011-3/+1
|\|
| * ash: placate -Werror=format-securityDenys Vlasenko2021-02-181-3/+1
| | | | | | | | | | | | | | | | | | | | "In function 'sprint_status48': error: format not a string literal and no format arguments" function old new delta sprint_status48 160 158 -2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | win32: move is_absolute_path()Ron Yorston2021-03-011-3/+0
| | | | | | | | | | Make is_absolute_path() a function rather than a macro and move it from ash.c into mingw.c.
* | ash: code shrinkRon Yorston2021-02-141-1/+1
| | | | | | | | | | Since there's only one call to mingw_spawn_forkshell() we might as well just call spawnve() directly from ash.
* | win32: code shrinkRon Yorston2021-02-131-1/+1
| | | | | | | | | | | | | | | | Rewrite the recent change to tab completion so it only needs one call to sprintf. Then replace sprintf with strcpy/stpcpy, both there and in a couple of other places. Saves 40 bytes.
* | win32: code shrinkRon Yorston2021-02-061-0/+2
| | | | | | | | | | Don't compile some code that isn't currently supported for WIN32. Saves 24 bytes.
* | ash: alter handling of interactive ^CFRP-3812-g12e14ebbaRon Yorston2021-01-181-1/+3
| | | | | | | | | | | | | | | | Upstream commit 4ac35a30d (ash: make interactive ^C break out of PS2 mode) doesn't work for WIN32. It causes the shell to exit when ^C is pressed on the command line. Call raise_interrupt() instead of raise(SIGINT).
* | Merge branch 'busybox' into mergeRon Yorston2021-01-141-96/+106
|\|
| * ash: match bash behavior for ${empty_var/*/repl}Denys Vlasenko2021-01-091-3/+3
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: fix ${unset_var/pattern/repl}Denys Vlasenko2021-01-091-1/+2
| | | | | | | | | | | | | | function old new delta subevalvar 1349 1353 +4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: improve --helpDenys Vlasenko2021-01-041-2/+7
| | | | | | | | | | | | | | function old new delta packed_usage 33504 33499 -5 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: code shrinkDenys Vlasenko2021-01-031-2/+2
| | | | | | | | | | | | | | function old new delta ash_main 1218 1202 -16 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: make a strdup copy of $HISTFILE for line editingDenys Vlasenko2021-01-031-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>
| * libbb: introduce and use xgettimeofday(), do not truncate 64-bit time_t in ↵Denys Vlasenko2020-12-301-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | shells function old new delta xgettimeofday - 11 +11 get_local_var_value 280 281 +1 svlogd_main 1323 1322 -1 change_epoch 67 66 -1 timestamp_and_log 461 458 -3 hwclock_main 301 298 -3 fmt_time_bernstein_25 135 132 -3 step_time 331 326 -5 script_main 1207 1202 -5 machtime 34 28 -6 curtime 61 54 -7 ts_main 423 415 -8 nmeter_main 761 751 -10 gettime1900d 67 46 -21 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/12 up/down: 12/-73) Total: -61 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>
| * shell: for signal exitcode, use 128 | sig, not 128 + sig - MIPS has signal 128Denys Vlasenko2020-12-231-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
| * bc: do not allocate line editing state until neededDenys Vlasenko2020-12-211-2/+1
| | | | | | | | | | | | | | | | | | | | | | 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>
| * 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>
| * 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-301-3/+3
| | | | | | | | | | | | | | | | 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>
* | ash: suppress compiler warningRon Yorston2020-11-121-0/+1
| | | | | | | | | | | | | | The 64-bit compiler complains that 'status' in dowait() might be used uninitialised. The 32-bit compiler doesn't. Make it shut up.
* | Merge branch 'busybox' into mergeRon Yorston2020-11-121-75/+70
|\|
| * shell: update comments on the status of [[ ]] compatDenys Vlasenko2020-10-311-3/+3
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>