aboutsummaryrefslogtreecommitdiff
path: root/shell/ash.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* | 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>
| * shell: better support of [[ ]] bashismDenys Vlasenko2020-10-311-7/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
| * 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>
| * 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>
* | ash, ls: improve support for 'c:path'Ron Yorston2020-08-281-0/+4
| | | | | | | | | | | | | | | | | | | | Revert commit 249f68e3c (win32: append '/' to bare drive name in opendir). Instead add better handling for paths of the form 'c:path' to ls and expmeta() in ash. Adds 64 bytes.
* | ash: replace backslashes in argument to 'cd' built-inRon Yorston2020-08-271-1/+1
| | | | | | | | | | | | | | Since the new current directory is normalised it might as well also have forward slashes. See GitHub issue #198.
* | win32: code shrink Unix-style path handlingRon Yorston2020-08-231-13/+14
| | | | | | | | | | | | | | | | Replace auto_add_system_drive() with alloc_system_drive() which leaves space for a possible filename extension. This makes it possible to drop alloc_win32_extension() and auto_win32_extension(). Saves 144 bytes.
* | ash: use stack, not heap, to add system drive to pathRon Yorston2020-08-211-16/+27
| | | | | | | | Make the code a bit tidier, no change to functionality or size.
* | win32: use built-in applets for non-existent binaries with Unix-style pathsRon Yorston2020-08-131-9/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Shell scripts moved from Unix may contain hard-coded paths to binaries such as /bin/sh. A recent commit made it possible to execute such binaries reliably, but that does require them to be installed. As an alternative solution: if a binary with a standard Unix path prefix can't be found but is available as a built-in applet, run the applet. Add the function unix_path() to detect paths starting with /bin, /usr/bin, /sbin or /usr/sbin. Use this function in: - the 'which' applet - shellexec(), describe_command() and find_command() in ash - mingw_spawn_1() See GitHub issue #195.
* | win32: handle Unix-style absolute paths for executablesRon Yorston2020-08-131-2/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As noted in commit 548ec7045 (win32: interpret absolute paths as relative to %SYSTEMDRIVE%) a path starting with a '/' in the Unix world is treated as relative to the current drive by Windows. To avoid ambiguity that commit considered certain such paths to be relative to %SYSTEMDRIVE%. Extend this to paths representing executables. Add the functions need_system_drive() and auto_add_system_drive() to detect the need for a system drive prefix and to add it if necessary. Use these functions in: - the 'which' applet - the find_executable() function - tab-completion code - PATH look-up, shellexec(), describe_command() and find_command() in ash - parse_interpreter() and mingw_spawn_1() With these changes executable paths starting with a slash are handled consistently, whatever the current drive.
* | win32: use a static buffer in get_system_drive()Ron Yorston2020-08-131-2/+1
| | | | | | | | | | | | | | Allocate static storage for the system drive string instead of making a new allocation on every call. This is easier to manage. Adds 16 bytes.
* | win32: code shrinkRon Yorston2020-08-131-3/+6
| | | | | | | | | | | | | | | | | | | | Add a new function, has_path(), to detect that an executable name doesn't require a path look-up. Also, since is_absolute_path() is now only used in shell/ash.c move its definition there from include/mingw.h. Saves 128 bytes.