summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2018-08-05ash: eval: Variable assignments on functions are no longer persistentDenys Vlasenko
Upstream commit: Date: Wed, 4 Apr 2018 17:54:01 +0800 eval: Variable assignments on functions are no longer persistent Dirk Fieldhouse <fieldhouse@gmx.net> wrote: > In POSIX.1-2017 ("simultaneously IEEE Std 1003.1™-2017 and The Open > Group Technical Standard Base Specifications, Issue 7") > <http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09>, > we read under '2.9.1 Simple Commands' > > "Variable assignments shall be performed as follows: > ... > - If the command name is a standard utility implemented as a function > (see XBD Utility), the effect of variable assignments shall be as if the > utility was not implemented as a function. > ... > - If the command name is a function that is not a standard utility > implemented as a function, variable assignments shall affect the current > execution environment during the execution of the function. It is > unspecified: > > * Whether or not the variable assignments persist after the > completion of the function > > * Whether or not the variables gain the export attribute during > the execution of the function > > * Whether or not export attributes gained as a result of the > variable assignments persist after the completion of the function (if > variable assignments persist after the completion of the function)" POSIX used to require the current dash behaviour. However, you're right that this is no longer the case. This patch will remove the persistence of the variable assignment. I have considered the exporting the variables during the function execution but have decided against it because: 1) It makes the code bigger. 2) dash has never done this in the past. 3) You cannot use this portably anyway. Reported-by: Dirk Fieldhouse <fieldhouse@gmx.net> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> function old new delta evalcommand 1606 1635 +29 evalcase 313 317 +4 evalfun 280 268 -12 pushlocalvars 48 - -48 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 2/1 up/down: 33/-60) Total: -27 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-04ash,hush: properly handle ${v//pattern/repl} if pattern starts with /Denys Vlasenko
Closes 2695 function old new delta parse_dollar 762 790 +28 subevalvar 1258 1267 +9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 37/0) Total: 37 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-04tar: fix a thinko in prev commit - we need to copy to _unused_ fdDenys Vlasenko
function old new delta vfork_compressor 257 246 -11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-04tar: handle the case when opened created tarball happens to have fd#0Denys Vlasenko
Reproducer: exec 0>&- exec 1>&- tar czf z.tar.gz FILE function old new delta vfork_compressor 229 257 +28 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-04tar: make source code a bit more terse, no logic changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-03uptime: add -s supportDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-03Complie libbb/duration.c if ping[6] is selectedDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-03ping: implement -i SECDenys Vlasenko
function old new delta common_ping_main 1862 1968 +106 ualarm - 79 +79 packed_usage 32858 32897 +39 sendping_tail 204 218 +14 ------------------------------------------------------------------------------ (add/remove: 5/0 grow/shrink: 3/0 up/down: 320/0) Total: 320 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-03timeout: fix arguments to match coreutilsDenys Vlasenko
Was: timeout [-t SECS] [-s SIG] PROG ARGS Is: timeout [-s SIG] SECS PROG ARGS function old new delta timeout_main 312 319 +7 packed_usage 32882 32858 -24 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 7/-24) Total: -17 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-03extend fractional duration support to "top -d N.N" and "timeout"Denys Vlasenko
function old new delta parse_duration_str - 168 +168 sleep_for_duration - 157 +157 top_main 885 928 +43 timeout_main 269 312 +43 handle_input 571 614 +43 duration_suffixes - 40 +40 sfx 40 - -40 sleep_main 364 79 -285 ------------------------------------------------------------------------------ (add/remove: 4/1 grow/shrink: 3/1 up/down: 494/-325) Total: 169 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-03ntpd: show real, unclamped delays on low-latency networksDenys Vlasenko
On fast network, I've seen "delay:0.002000" shown for all packets, thus completely losing information on what real delays are. The new code is careful to not reject packets with tiny delays if the delay "grows a lot" but is still tiny: 0.000009 is "much larger" than 0.000001 (nine times larger), but is still very good small delay. function old new delta recv_and_process_peer_pkt 863 889 +26 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-01ls: When -h is passed, the total should also be in human unitsLauri Kasanen
Signed-off-by: Lauri Kasanen <cand@gmx.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-01nslookup: add support for search domains, closes 11161Denys Vlasenko
function old new delta parse_resolvconf - 311 +311 add_query_with_search - 105 +105 nslookup_main 873 757 -116 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 0/1 up/down: 416/-116) Total: 300 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-01cp: placate gcc8Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-01Add chroot support to chpasswdJon Kolb
function old new delta .rodata 170689 170724 +35 packed_usage 32850 32876 +26 chpasswd_main 411 436 +25 chpasswd_longopts 34 41 +7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/0 up/down: 93/0) Total: 93 bytes Signed-off-by: Jon Kolb <kolbyjack@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-01udhcpc: add a cooment about sanitizing DHCP_DOMAIN_NAME, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-01udhcpc: do in fact not allow hostname components which start with dashDenys Vlasenko
function old new delta xmalloc_optname_optval 879 893 +14 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-31sendmail: use on-stack buffer for AUTH PLAINDenys Vlasenko
function old new delta sendmail_main 1335 1307 -28 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-31sendmail: code shrink 2Denys Vlasenko
function old new delta sendmail_main 1366 1335 -31 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-31sendfile: code shrinkDenys Vlasenko
function old new delta printstr_base64 - 22 +22 printbuf_base64 - 11 +11 printfile_base64 - 9 +9 makemime_main 305 294 -11 encode_n_base64 236 223 -13 sendmail_main 1380 1366 -14 encode_base64 36 - -36 ------------------------------------------------------------------------------ (add/remove: 3/1 grow/shrink: 0/3 up/down: 42/-74) Total: -32 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-31sendmail: support AUTH PLAIN in addition to AUTH LOGINRaffaello D. Di Napoli
Implement the -am argument to allow choosing an AUTH method. For now only PLAIN and LOGIN are supported, but others can be added easily in the future. AUTH PLAIN required adding a new variant of encode_base64() capable of handling NUL characters in the input string; the old function is now a wrapper for the newer one. function old new delta encode_n_base64 - 236 +236 sendmail_main 1199 1380 +181 packed_usage 32873 32877 +4 encode_base64 242 36 -206 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/1 up/down: 421/-206) Total: 215 bytes Signed-off-by: Raffaello D. Di Napoli <rafdev@dinapo.li> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-31klogd: code shrinkDenys Vlasenko
function old new delta klogd_main 511 486 -25 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-31install.sh: don't clobber dangling symlinksBaruch Siach
Symlinks in a subdirectory that is to become target rootfs are sometimes dangling because they link to canonical file names that are not present on the host, but are present relative to the target rootfs root. Don't copy over dangling symlinks when noclobber is enabled The -e test treats dangling symlinks as non-existent files. Add -h test that returns true for all symlinks. Cc: Yann E. MORIN <yann.morin.1998@free.fr> Signed-off-by: Baruch Siach <baruch@tkos.co.il> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-31klogd: better help textDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-31hush: speed up ${var:+ARG} for literal ARGsDenys Vlasenko
function old new delta first_special_char_in_vararg - 52 +52 expand_one_var 2248 2296 +48 encode_then_expand_vararg 357 336 -21 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/1 up/down: 100/-21) Total: 79 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-28hush: fix another case where empty "for" wasn't setting exitcode to 0Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-28hush: disable debug_indent increment/decrement for HUSH_DEBUG < 2 buildsDenys Vlasenko
function old new delta run_list 1063 1046 -17 parse_stream 2296 2249 -47 run_pipe 1890 1840 -50 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-114) Total: -114 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-28hush: make "set -x" output don't redirectable when fd#2 redirectedDenys Vlasenko
function old new delta x_mode_print_optionally_squoted - 120 +120 x_mode_flush - 68 +68 save_fd_on_redirect 208 243 +35 x_mode_prefix - 27 +27 x_mode_addblock - 23 +23 x_mode_addchr - 17 +17 dump_cmd_in_x_mode 110 85 -25 run_pipe 1919 1890 -29 print_optionally_squoted 145 - -145 ------------------------------------------------------------------------------ (add/remove: 5/1 grow/shrink: 1/2 up/down: 290/-199) Total: 91 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-27hush: make "set -x" output closer to bashDenys Vlasenko
function old new delta print_optionally_squoted - 145 +145 run_pipe 1902 1919 +17 dump_cmd_in_x_mode 142 110 -32 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/1 up/down: 162/-32) Total: 130 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-27hush: fix "set -x" output prefix overlapping for v="..`cmd`.." caseDenys Vlasenko
Was printing initial "+" prefix for the assignment, that printing "+ cmd" then printing the expanded " v=VAL" string. Delay printing of "+" prefix for the assignment to after expansion. function old new delta run_pipe 1883 1902 +19 builtin_eval 127 133 +6 expand_vars_to_list 1103 1106 +3 dump_cmd_in_x_mode 144 142 -2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/1 up/down: 28/-2) Total: 26 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-27hush: in some cases, expand_on_ifs() relied of uninitialized memoryDenys Vlasenko
The n > 0 check to prevent access to the last byte of non-existing argv[-1] wasn't enough. Switched to making sure there are initialized (zero) bytes there. A predictable testcase is rather hard to construct, unfortunately, contents of memory depends on allocator behavior and whatnot. function old new delta o_save_ptr_helper 119 137 +18 expand_on_ifs 345 339 -6 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 18/-6) Total: 12 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-26hush: improve set -x: make "+++" indent level increase in `cmd` and eval.Denys Vlasenko
function old new delta dump_cmd_in_x_mode 126 144 +18 run_pipe 1873 1883 +10 builtin_eval 119 127 +8 expand_vars_to_list 1100 1103 +3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/0 up/down: 39/0) Total: 39 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-26examples/var_service: add /var/run flag file to ntp.scriptDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-25htpd: increase MIN_FREQHOLD by 3Denys Vlasenko
This means we'll start correcting frequency ~5 minutes after start, not ~3.5 ones. With previos settings I still often see largish ~0.7s initial offsets only about 1/2 corrected before frequency correction kicks in, resulting in ~200ppm "correction" which is then slowly undone. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-25fdisk: code shrinkDenys Vlasenko
function old new delta get_nonexisting_partition 119 104 -15 fdisk_main 2640 2622 -18 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-33) Total: -33 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-25fdisk: sync up with some util-linux 2.31 behaviorDenys Vlasenko
= display default is no longer in cylinders = +sizeC is no longer supported = add +sizeT suffix - terabytes are here = K,M,G,T and k,m,g,t suffixes all are binary, not decimal = +sizeM results in last sector +(size * 1Mbyte - 1), not +(size * 1Mbyte) = fix comparison to "YES" answer for sgi/sun function old new delta read_int 492 519 +27 fdisk_main 2644 2640 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 27/-4) Total: 23 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-25fdisk: use strtoul[l] instead of atoi, closes 11176Denys Vlasenko
Couldn't create partitions bigger than 1TB (when using 512 bytes sectors, on 32 bits architectures). Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-24gzip: unbreak FEATURE_GZIP_LEVELS, closes 11171Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-24hush: fix/explain corner cases of redirection colliding with script fdDenys Vlasenko
function old new delta save_fd_on_redirect 200 208 +8 run_pipe 1870 1873 +3 setup_redirects 321 322 +1 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 12/0) Total: 12 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-24hush: add "heredoc.tests" from ash, tweak ash "is a function" messageDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-24hush: fix nested redirects colliding with script fdsDenys Vlasenko
This necessitates switch from libc FILE api to a simple homegrown replacement. The change which fixes the bug here is the deleting of restore_redirected_FILEs(); line. It was prematurely moving (restoring) script fd#3. The fix is: we don't even _want_ to restore scrit fds, we are perfectly fine with them being moved. The only reason we tried to restore them is that FILE api did not allow moving of FILE->fd. function old new delta refill_HFILE_and_getc - 93 +93 hfopen - 90 +90 hfclose - 66 +66 pseudo_exec_argv 591 597 +6 hush_main 1089 1095 +6 builtin_source 209 214 +5 save_fd_on_redirect 197 200 +3 setup_redirects 320 321 +1 fgetc_interactive 235 236 +1 i_peek_and_eat_bkslash_nl 99 97 -2 expand_vars_to_list 1103 1100 -3 restore_redirects 99 52 -47 fclose_and_forget 57 - -57 remember_FILE 63 - -63 ------------------------------------------------------------------------------ (add/remove: 3/2 grow/shrink: 6/3 up/down: 271/-172) Total: 99 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-24hush: handle backslash-newline in heredoc terminatorsDenys Vlasenko
function old new delta fetch_heredocs 479 527 +48 (ash fails this test) Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-24hush: fix handling of heredocs not enclosed in groups where they are "declared"Denys Vlasenko
function old new delta fetch_heredocs - 479 +479 parse_and_run_stream 146 148 +2 parse_stream 2787 2296 -491 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/1 up/down: 481/-491) Total: -10 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-23hush: fix heredoc handling in the "cmd <<EOF ;<newline>" caseDenys Vlasenko
function old new delta parse_stream 2759 2787 +28 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-23hush: fix handling of heredocs starting with empty linesDenys Vlasenko
function old new delta parse_stream 2748 2759 +11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-23hexedit: fixes for redraw and down movement causing SEGV on attempt to accessDenys Vlasenko
"Go to:" command was not updating row position, making next "down" movements for one screenful print empty lines instead of showing the contents. If the file is whole pages long, "down" movement at EOF was advancing position +16 bytes, mapping the next portion (entirely past the end of the file), then finding out that the new position is beyond the EOF, rolling it back -16 bytes... ending up with this postion pointing *before* the mapped portion. Any next access (e.g. "move right" key) SEGVs. function old new delta hexedit_main 1170 1184 +14 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-20hush: never glob result of dquoted "${v:+/bin/c*}"Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
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>