Commit Graph
100 Commits
Author SHA1 Message Date
Denys Vlasenko 2fba2f5bb9 unicode: relax array alignment for tables
text	   data	    bss	    dec	    hex	filename
1022075	    559	   5052	1027686	  fae66	busybox_old
1021988	    559	   5052	1027599	  fae0f	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-30 11:30:17 +01:00
Denys Vlasenko 33e955ab91 unicode: fix handling of short 1-4 char tables
function                                             old     new   delta
in_uint16_table                                       92     107     +15

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-30 11:18:00 +01:00
Denys Vlasenko eb773054e4 libbb: code shrink
function                                             old     new   delta
generate_uuid                                        124     103     -21

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-29 14:24:14 +01:00
Denys Vlasenko 6a55b4e403 libbb: introduce and use msleep()
function                                             old     new   delta
msleep                                                 -      45     +45
watchdog_main                                        271     266      -5
common_traceroute_main                              3546    3530     -16
beep_main                                            277     248     -29
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/3 up/down: 45/-50)             Total: -5 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-29 12:40:25 +01:00
Denys Vlasenko b86a9ed699 use write_str() functions where appropriate
function                                             old     new   delta
chat_main                                           1300    1295      -5
finalize_tty_attrs                                    80      70     -10
getty_main                                          1538    1519     -19
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-34)             Total: -34 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-29 11:49:37 +01:00
Denys Vlasenko ec16c030bd libbb: introduce and use sleep1()
function                                             old     new   delta
sleep1                                                 -       9      +9
run_shutdown_and_kill_processes                       97      95      -2
restore_state_and_exit                               116     114      -2
reread_partition_table                                67      65      -2
flush_buffer_cache                                    80      78      -2
chat_main                                           1302    1300      -2
timeout_main                                         310     307      -3
telnet_main                                         1235    1232      -3
stop_handler                                          86      83      -3
process_action                                      1078    1075      -3
nbdclient_main                                      1185    1182      -3
init_main                                            789     786      -3
getty_main                                          1541    1538      -3
do_time                                              410     407      -3
runsv_main                                          1682    1677      -5
pause_and_low_level_reboot                            59      54      -5
inetd_main                                          1917    1911      -6
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/16 up/down: 9/-50)            Total: -41 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-29 11:37:34 +01:00
Denys Vlasenko 87bd558f3f libbb: bb_do_delay(3) -> pause_after_failed_login(), and stop looping there
function                                             old     new   delta
pause_after_failed_login                               -       9      +9
vlock_main                                           358     353      -5
sulogin_main                                         252     247      -5
su_main                                              484     479      -5
passwd_main                                          936     931      -5
login_main                                           967     962      -5
bb_do_delay                                           68       -     -68
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 0/5 up/down: 9/-93)             Total: -84 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-29 11:32:48 +01:00
Denys Vlasenko 32a8f70ac1 libbb: in @SECONDS date format, use 64-bit time if libc allows
function                                             old     new   delta
packed_usage                                       33472   33486     +14
parse_datestr                                        919     916      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 23:21:13 +01:00
Denys Vlasenko 4dee016059 date: tweak --help: -D FMT is used for -s TIME as well
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 23:04:09 +01:00
Denys Vlasenko 56a5731a1a date: remove non-standard special-casing of date '+%f'
git log did not reveal why it is there.

function                                             old     new   delta
date_main                                           1016     995     -21

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 22:07:00 +01:00
Denys Vlasenko f26c5660c2 date: trim --help (no need to show long opts)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 22:01:15 +01:00
Denys Vlasenko 900eae1738 date: support -Ins, more compatible timezone display in -I
function                                             old     new   delta
date_main                                            941    1016     +75
static.isoformats                                     28      31      +3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 78/0)               Total: 78 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 21:44:58 +01:00
Denys Vlasenko ab6991c6f5 date: for -uR and -uIh, timezone still have to be shown at +hhmm, not as abbreviation
function                                             old     new   delta
date_main                                            963     941     -22

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 20:58:42 +01:00
Denys Vlasenko 818a4aa2ef fix comments
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 14:22:52 +01:00
Denys Vlasenko ae04ce82cf base32/64: "truncated base64 input" -> "truncated input"
text	   data	    bss	    dec	    hex	filename
1021739	    559	   5052	1027350	  fad16	busybox_old
1021732	    559	   5052	1027343	  fad0f	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 13:43:54 +01:00
Denys Vlasenko 885121e25d libbb: change decode_base32/64 API to return the end of _dst_, not _src_.
function                                             old     new   delta
decode_base64                                        173     178      +5
read_base64                                          222     220      -2
decode_base32                                        186     182      -4
handle_incoming_and_exit                            2263    2239     -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 5/-30)             Total: -25 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 13:27:36 +01:00
Denys Vlasenko fc6faac84e libbb: trim base32/64 tables
function                                             old     new   delta
bb_uuenc_tbl_base64                                   66      65      -1
bb_uuenc_tbl_base32                                   34      32      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 12:48:34 +01:00
Denys Vlasenko f140b49f5f base32/64: code shrink
function                                             old     new   delta
decode_base64                                        178     173      -5
decode_base32                                        217     186     -31
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-36)             Total: -36 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 12:33:50 +01:00
Denys Vlasenko 7467e905e5 base32/64: code shrink
function                                             old     new   delta
decode_base64                                        180     178      -2
decode_base32                                        224     217      -7
read_base64                                          236     222     -14
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-23)             Total: -23 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-28 09:50:14 +01:00
Denys Vlasenko 2cd37d65e2 libbb: faster and smaller decode_base32()
function                                             old     new   delta
decode_base32                                        275     224     -51

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-27 21:25:34 +01:00
Denys Vlasenko 170b8628fa libbb: smaller and faster decode_base64()
function                                             old     new   delta
decode_base64                                        195     180     -15

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-27 20:45:15 +01:00
Denys Vlasenko dc68a5ddac sha3sum: fix --help: -a does not depend on FEATURE_MD5_SHA1_SUM_CHECK
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-27 15:55:46 +01:00
Denys Vlasenko cdab3c4fac base32/64: decode in-place
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-27 15:39:23 +01:00
Denys Vlasenko c8b3d9a145 base32/64: implement -w COL
function                                             old     new   delta
baseNUM_main                                         568     655     +87
packed_usage                                       33478   33533     +55
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 142/0)             Total: 142 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-27 15:25:31 +01:00
Denys Vlasenko fc63549352 free: code shrink
function                                             old     new   delta
free_main                                            664     657      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-27 12:40:31 +01:00
Denys Vlasenko 20900489a1 base32: new applet
function                                             old     new   delta
baseNUM_main                                           -     568    +568
decode_base32                                          -     275    +275
bb_uuenc_tbl_base32                                    -      34     +34
read_base64                                          218     236     +18
applet_names                                        2732    2739      +7
applet_main                                         1580    1584      +4
packed_usage                                       33480   33478      -2
base64_main                                          208       -    -208
------------------------------------------------------------------------------
(add/remove: 3/1 grow/shrink: 3/1 up/down: 906/-210)          Total: 696 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-26 09:04:16 +01:00
Denys Vlasenko 03eb6eba43 mdev: clear LOGMODE_STDIO only directly before daemonizing
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-22 16:35:56 +01:00
Denys Vlasenko cb143b9793 uevent: make it survive ENOBUFS
function                                             old     new   delta
uevent_main                                          285     337     +52

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-22 16:22:16 +01:00
Denys Vlasenko 1c9cd9b71b mdev: clean up
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-22 14:43:35 +01:00
Denys Vlasenko a569fd37fe uevent: increase netlink buffer sizes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-22 13:34:07 +01:00
Denys Vlasenko 4323ac861e libiproute: reuse string constants
text	   data	    bss	    dec	    hex	filename
1020826	    559	   5052	1026437	  fa985	busybox_old
1020815	    559	   5052	1026426	  fa97a	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-21 17:23:13 +01:00
Denys Vlasenko 2c92d1ec58 volume_id: improve struct layout (smaller offesets, smaller insns on x86)
function                                             old     new   delta
volume_id_probe_xfs                                  101      98      -3
volume_id_probe_vfat                                 827     824      -3
volume_id_probe_udf                                  541     538      -3
volume_id_probe_ubifs                                 67      64      -3
volume_id_probe_squashfs                              86      83      -3
volume_id_probe_romfs                                 97      94      -3
volume_id_probe_reiserfs                             246     243      -3
volume_id_probe_ocfs2                                110     107      -3
volume_id_probe_ntfs                                 288     285      -3
volume_id_probe_nilfs                                100      97      -3
volume_id_probe_minix                                 85      82      -3
volume_id_probe_luks                                  92      89      -3
volume_id_probe_linux_swap                           251     248      -3
volume_id_probe_linux_raid                           131     128      -3
volume_id_probe_lfs                                   62      59      -3
volume_id_probe_jfs                                  110     107      -3
volume_id_probe_iso9660                              318     315      -3
volume_id_probe_f2fs                                 107     104      -3
volume_id_probe_exfat                                285     282      -3
volume_id_probe_erofs                                 89      86      -3
volume_id_probe_cramfs                                67      64      -3
volume_id_probe_btrfs                                134     131      -3
volume_id_probe_bcache                               107     104      -3
volume_id_probe_sysv                                 194     188      -6
volume_id_probe_hfs_hfsplus                          518     512      -6
add_to_uuid_cache                                    271     265      -6
volume_id_probe_ext                                  131     122      -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/27 up/down: 0/-96)            Total: -96 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-19 13:58:25 +01:00
Denys Vlasenko 4ac35a30db ash: make interactive ^C break out of PS2 mode
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>
2020-11-16 13:09:37 +01:00
Denys Vlasenko dc9c10a7b2 hush: make interactive ^C break out of PS2 mode
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>
2020-11-16 13:00:44 +01:00
Denys Vlasenko 5323af7f51 awk: fix dodgy multi-char separators splitting logic
function                                             old     new   delta
awk_split                                            521     484     -37

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-16 10:40:32 +01:00
Denys Vlasenko 64981b4c8e hush: document bugs in [[ =~ ]] comparison
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-01 18:47:24 +01:00
Denys Vlasenko a7c065354f shell: update comments on the status of [[ ]] compat
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-31 04:32:34 +01:00
Denys Vlasenko b259e97d47 hush: add tests for unquoted < > in [[ ]]
They pass.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-31 03:51:37 +01:00
Denys Vlasenko d2241f5902 shell: better support of [[ ]] bashism
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>
2020-10-31 03:34:07 +01:00
Denys Vlasenko 112453acf2 od: unbreak it
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-25 23:44:22 +01:00
Denys Vlasenko 32e1f69ae0 compat: move hexdump -R functionality to xxd -r
function                                             old     new   delta
xxd_main                                             466     680    +214
packed_usage                                       33474   33483      +9
hexdump_opts                                          17      16      -1
hexdump_main                                         565     401    -164
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/2 up/down: 223/-165)           Total: 58 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-25 16:06:45 +01:00
Denys Vlasenko e16f7eb596 hush: output bash-compat killing signal names
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>
2020-10-24 04:26:43 +02:00
Denys Vlasenko b65d6cb00f hush: do not print killing signal name in cmd_whihc_dies_on_signal
function                                             old     new   delta
process_wait_result                                  438     449     +11

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-24 03:33:32 +02:00
Denys Vlasenko 079487b487 hexdump: fix dup block comparison
function                                             old     new   delta
bb_dump_dump                                        1523    1520      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-20 19:29:32 +02:00
Denys Vlasenko dac5b83142 xxd: fix printing of trailing spaces
function                                             old     new   delta
bb_dump_dump                                        1497    1523     +26
xxd_main                                             459     466      +7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 33/0)               Total: 33 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-20 18:57:02 +02:00
Denys Vlasenko 085f19cdff uudecode: fix possible signed char bug
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-07 17:02:46 +02:00
Denys Vlasenko 2496616b0a avoid using strok - eliminates use of hidden global variable
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>
2020-10-06 02:36:47 +02:00
Denys Vlasenko 16e82c61d4 tar: fix fallout of last_char_is(NULL) no longer being allowed
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-02 18:30:53 +02:00
Denys Vlasenko a90a54aead udhcp: remove struct packing attribute, eliminates gcc-9.x
"error: taking address of packed member of 'struct ip_udp_dhcp_packet'
may result in an unaligned pointer value" here:

	udhcp_dump_packet(&packet.data);

and in other places.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-01 23:49:16 +02:00
Denys Vlasenko 689d0650ab libbb: shrink recursive_action() by reducing memory pressure
function                                             old     new   delta
recursive_action1                                      -     316    +316
file_action_grep                                     161     164      +3
add_to_prg_cache_if_socket                           202     205      +3
depmod_main                                          509     511      +2
writeFileToTarball                                   488     489      +1
parse_module                                         281     282      +1
fileAction                                           207     208      +1
act                                                  189     190      +1
add_to_dirlist                                        65      64      -1
writeTarFile                                         196     194      -2
uuidcache_init                                        47      45      -2
uuidcache_check_device                               109     107      -2
true_action                                            8       6      -2
run_parts_main                                       310     308      -2
netstat_main                                         534     532      -2
lsusb_main                                            29      27      -2
lspci_main                                            45      43      -2
initial_scan                                         138     136      -2
grep_main                                            845     843      -2
find_main                                            482     480      -2
config_file_action                                   437     435      -2
chmod_main                                           142     140      -2
dirAction                                             14      10      -4
diff_main                                           1544    1540      -4
chown_main                                           154     148      -6
skip_dir                                             136     129      -7
dir_act                                              191     184      -7
recursive_action                                     453      69    -384
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 7/20 up/down: 328/-439)        Total: -111 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-01 21:52:16 +02:00
Denys Vlasenko 3c3928fc65 tydy up a few uses of recursive_action(), no logic changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-01 20:27:28 +02:00
Denys Vlasenko 4a0eb0370c gcc-9.x warning fixes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-01 03:07:22 +02:00
Denys Vlasenko aaa0709e7b libbb: do not open-code __errno_location() call
Thanks dalias!

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-01 01:44:26 +02:00
Denys Vlasenko 841878e7ee shell: remove FAST_FUNC from a static function
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-01 00:57:05 +02:00
Denys Vlasenko b1c7a66ca6 libbb: extend "errno pointer" trick to other than __GLIBC__
Savings on musl:

function                                             old     new   delta
resume_main                                          582     614     +32
lbb_prepare                                            -      20     +20
seq_main                                             432     449     +17
fgetsetversion                                        74      88     +14
...
script_main                                         1207    1180     -27
close_silently                                        28       -     -28
shell_builtin_ulimit                                 655     626     -29
lineedit_read_key                                    280     247     -33
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 25/123 up/down: 182/-882)      Total: -700 bytes
   text	   data	    bss	    dec	    hex	filename
1005858	    551	   5676	1012085	  f7175	busybox_old
1005136	    551	   5680	1011367	  f6ea7	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-10-01 00:34:44 +02:00
Denys Vlasenko abefc3c276 libbb: fold common64_hash() into its only user
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-09-30 22:22:04 +02:00
Denys Vlasenko bd202a5ec1 xargs: fix -I SUBSTR behaviour
function                                             old     new   delta
process_stdin_with_replace                           165     204     +39

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-09-30 00:00:43 +02:00
Denys Vlasenko d4dd48f294 shell: add testsuite for "wait $pid" waiting for other tasks
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-09-29 22:36:36 +02:00
Denys Vlasenko 91e11eba6e ash: jobs: Fix waitcmd busy loop
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>
2020-09-29 20:35:55 +02:00
Denys Vlasenko 8d5f465a20 ash: jobs: Fix infinite loop in waitproc
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>
2020-09-29 20:21:27 +02:00
Denys Vlasenko 777a6357c0 ash: remove a tentative TODO, it's a wrong idea
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>
2020-09-29 20:21:27 +02:00
Denys Vlasenko afb5d8b2db ntpd: fix the case where two replies received at once and first one causes a step
function                                             old     new   delta
recv_and_process_peer_pkt                           2476    2486     +10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-09-29 14:19:17 +02:00
Denys Vlasenko a77f3ecf68 grep: for -L, exitcode 0 means files *without* matches were found, closes 13151
This is a recent change in GNU grep as well (after 3.1)

function                                             old     new   delta
grep_file                                           1215    1228     +13

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-08-15 00:39:30 +02:00
Denys Vlasenko 2dd82f465e lsscsi: code shrink
function                                             old     new   delta
lsscsi_main                                          298     302      +4
get_line                                              56      45     -11
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 4/-11)              Total: -7 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-07-20 02:03:02 +02:00
Denys Vlasenko 9a2d899273 ntpd: fix refid reported in server mode, closes 13056
function                                             old     new   delta
resolve_peer_hostname                                129     196     +67
recv_and_process_peer_pkt                           2475    2476      +1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 68/0)               Total: 68 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-07-20 00:04:33 +02:00
Denys Vlasenko 06a407c628 networking: support ftp PASV responses not ending with ')'
Patch by Baruch Burstein <bmburstein@gmail.com>

function                                             old     new   delta
parse_pasv_epsv                                      153     181     +28

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-07-19 20:59:35 +02:00
Denys Vlasenko 79a4032eef libbb: shrink last_char_is(), no longer allow NULL string argument
function                                             old     new   delta
last_char_is                                          40      28     -12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-07-19 20:49:22 +02:00
Denys Vlasenko d21a63f9fc libbb: code shrink in last_char_is()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-30 08:33:02 +02:00
Denys Vlasenko c918ea1673 Start 1.33.0 development cycle
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-26 21:30:50 +02:00
Denys Vlasenko fb957125d8 Bump version to 1.32.0
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-26 21:22:50 +02:00
Denys Vlasenko 24c212b9ac gzip -d with zcat enabled but gunzip disabled was misbehaving
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-25 02:01:29 +02:00
Denys Vlasenko b02f8ca909 make_single_applets.sh: switch off nologin deps option
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-24 16:36:44 +02:00
Denys Vlasenko 5663a17dab bc: placate a "defined but not used" warning
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-24 15:05:29 +02:00
Denys Vlasenko 67e1529b92 nologin: make it possible to build it as single applet
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-24 15:05:22 +02:00
Denys Vlasenko d5314e7129 suppress a few compile warnings
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-24 09:31:30 +02:00
Denys Vlasenko 7c443d110d randomconfig fixes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-24 00:27:37 +02:00
Denys Vlasenko 5fa5c4bde8 randomconfig fixes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-23 21:28:19 +02:00
Denys Vlasenko d206b1651a randomconfig fix
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-23 09:38:53 +02:00
Denys Vlasenko 03ab212bff randomconfig fixes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-23 03:43:39 +02:00
Denys Vlasenko df1f479fc5 randomconfig fixes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-23 03:13:55 +02:00
Denys Vlasenko 6eb38fded2 randomconfig fixes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-23 02:46:53 +02:00
Denys Vlasenko 4789c7cd81 nmeter: add %T (zero-based timestamp) format
function                                             old     new   delta
collect_tv                                             -     132    +132
collect_monotonic                                      -      61     +61
nmeter_main                                          754     778     +24
gmtime                                                 -      21     +21
init_monotonic                                         -      18     +18
init_functions                                        44      48      +4
packed_usage                                       33432   33420     -12
collect_time                                         125      19    -106
------------------------------------------------------------------------------
(add/remove: 5/0 grow/shrink: 2/2 up/down: 260/-118)          Total: 142 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-10 15:37:39 +02:00
Denys Vlasenko 0cad5f9b6d udhcp: comment out unused domain compression code
function                                             old     new   delta
attach_option                                        411     406      -5
dname_enc                                            381     167    -214
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-219)           Total: -219 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-09 17:22:06 +02:00
Denys Vlasenko 002be6e821 sysctl: do report EACCES errors on write
function                                             old     new   delta
sysctl_act_recursive                                 165     179     +14
sysctl_act_on_setting                                467     471      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 18/0)               Total: 18 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-09 15:58:32 +02:00
Denys Vlasenko 6f7a009649 awk: disallow "str"++, closes bug 12981
function                                             old     new   delta
parse_expr                                           887     896      +9

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-09 01:33:54 +02:00
Denys Vlasenko 9aa751b08a shells: fix exitcode_trapN tests to avoid races
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-26 09:05:52 +01:00
Denys Vlasenko 1555895b4a ash: expand: Fix multiple issues with EXP_DISCARD in evalvar
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>
2020-02-24 19:20:51 +01:00
Denys Vlasenko 823318822c ash: expand: Do not reprocess data when expanding words
Upstream patch:

    Date: Wed, 30 May 2018 02:06:03 +0800
    expand: Do not reprocess data when expanding words

    Currently various paths will reprocess data when performing word
    expansion.  For example, expari will skip backwards looking for
    the start of the arithmetic expansion, while evalvar will skip
    unexpanded words manually.

    This is cumbersome and error-prone.  This patch fixes this by
    making word expansions proceed in a linear fashion.  This means
    changing argstr and the various expansion functions such as expari
    and subevalvar to return the next character to be expanded.

    This is inspired by similar code from FreeBSD.  However, we take
    things one step further and completely remove the manual word
    skipping in evalvar.  This is accomplished by introducing a new
    EXP_DISCARD flag that tells argstr to only parse and not produce
    any actual expansions.

    Incidentally, argstr will now always NUL-terminate the expansion
    unless the EXP_WORD flag is set.  This is because all but one
    caller of argstr wants the result to be NUL-termianted.

    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Also includes two one-line follow-up fixes:

    expand: Eat closing brace for length parameter
            if (subtype == VSLENGTH) {
    +               p++;
                    if (flag & EXP_DISCARD)
    expand: Fix double-decrement in argstr
    -               newloc = expdest - (char *)stackblock() - end;
    +               newloc = q - (char *)stackblock() - end;

and changes in code for bash substring extensions.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-24 19:20:51 +01:00
Denys Vlasenko 7f19848552 ash: rename some function parameters to match dash
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-24 12:48:33 +01:00
Denys Vlasenko 538ee4102b ash: rename stack_nputstr() back to stnputs() to match dash
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-24 12:47:19 +01:00
Denys Vlasenko c2058ec98c ash: Expand here-documents in the current shell environment
Upstream commit:

    Date: Sun, 11 Nov 2007 15:27:00 +0800
    Expand here-documents in the current shell environment

    Previously we always expanded here-documents in a subshell.  This is
    contrary to the POSIX specification and how other shells behave.  What's
    more this slows down many expansions due to the extra fork (however, it
    must be said that it is possible for it speed up certain expansions by
    running it simultaneously with the command on two CPUs).

    This patch move the expansion into the current shell environment.

    Test case:

            unset a
            cat <<- EOF > /dev/null
                    ${a=NOT}
            EOF
            echo ${a}BAD

    Old result:

            BAD

    New result:

            NOTBAD

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-22 20:29:36 +01:00
Denys Vlasenko c08993f40c ash: parser: Do not push token back before parseheredoc
Upstream commit:

    Date: Mon, 19 Nov 2018 18:43:58 +0800
    parser: Do not push token back before parseheredoc

    When we read the first token in list() we use peektoken instead
    of readtoken as the following code needs to use the same token
    again.  However, this is wrong when we're in a here-document as
    it will clobber the saved token without resetting the tokpushback
    flag.

    This patch fixes it by doing the tokpushback after parseheredoc
    and setting lasttoken again if parseheredoc was called.

    Reported-by: Ron Yorston <rmy@frippery.org>
    Fixes: 7c245aa8ed33 ("[PARSER] Simplify EOF/newline handling in...")
    Fixes: ee5cbe9fd6bc ("[SHELL] Optimize dash -c "command" to avoid a fork")
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Tested-by: Simon Ser <contact@emersion.fr>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-22 17:26:23 +01:00
Denys Vlasenko 9a1a659707 ash: parser: Fix old-style command substitution here-document crash
Upstream commit:

    Date: Fri, 29 Mar 2019 13:49:59 +0800
    parser: Fix old-style command substitution here-document crash

    ... This is caused by the recent change to
    save/restore here-docment list around command substitutions.  In
    doing so we must finish existing here-documents prior to restoring
    the old here-document list.  This is done for new-style command
    substitutions but not for old-style.

    This patch fixes it by doing it for both.

    Fixes: 51e2d88d6e51 ("parser: Save/restore here-documents in...")
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-22 16:39:27 +01:00
Denys Vlasenko e4a0612efd hush: fix negative_arith.tests: glob-protect dash in "$((arith))"
function                                             old     new   delta
expand_vars_to_list                                 1026    1082     +56
parse_dollar                                         810     811      +1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 57/0)               Total: 57 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-21 17:21:34 +01:00
Denys Vlasenko 45dd87aac0 ash: expand: Ensure result is escaped in cvtnum
Upstream commit:

    Date: Fri, 1 Jun 2018 18:25:29 +0800
    expand: Ensure result is escaped in cvtnum

    The minus sign generated from arithmetic expansion is currently
    unquoted which causes anomalies when the result is used in where
    the quoting matters.

    This patch fixes it by explicitly calling memtodest on the result
    in cvtnum.

    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-21 16:30:44 +01:00
Denys Vlasenko da2e46dff6 ash: memalloc: Avoid looping in growstackto
Upstream commit:

    Date: Thu, 31 May 2018 01:51:48 +0800
    memalloc: Avoid looping in growstackto

    Currently growstackto will repeatedly call growstackblock until
    the requisite size is obtained.  This is wasteful.  This patch
    changes growstackblock to take a minimum size instead.

    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-21 15:25:37 +01:00
Denys Vlasenko 3ced804e31 hush: make "exit" in trap use pre-trap exitcode - fix for nested trap
function                                             old     new   delta
check_and_run_traps                                  276     278      +2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-21 02:55:53 +01:00
Denys Vlasenko cc9ecd9af1 hush: make "exit" in trap use pre-trap exitcode
function                                             old     new   delta
check_and_run_traps                                  259     276     +17
builtin_exit                                          42      53     +11
hush_main                                           1086    1096     +10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 38/0)               Total: 38 bytes

Fixes exitcode_trap2.tests.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-21 02:18:06 +01:00
Denys Vlasenko f977e004ce ash: eval: Only restore exit status on exit/return
Upstream commit:

    Date: Fri, 14 Dec 2018 13:52:02 +0800
    eval: Only restore exit status on exit/return

    We unconditionally restore the saved status in exitreset, which
    is incorrect as we only want to do it for exitcmd and returncmd.
    This patch fixes the problem by introducing EXEND.

    Reported-by: Martijn Dekker <martijn@inlv.org>
    Fixes: da30b4b78769 ("[BUILTIN] Exit without arguments in a trap...")
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-20 16:54:29 +01:00
Denys Vlasenko cd24a50633 ash: Return without arguments in a trap should use status outside traps
Fixes exitcode_trap4.tests.
Upstream commit:

    Date: Mon, 6 Oct 2014 21:51:26 +0800
    Return without arguments in a trap should use status outside traps

    POSIX now requires that return without arguments in a trap should
    return the last command status prior to executing traps.  This
    patch implements this behaviour.

    Incidentally this also changes the behaviour of return without
    arguments in a loop conditional to use the last exit status in
    the body as opposed to the last command in the conditional when
    there is one.

    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-20 16:47:01 +01:00