oweals/busybox.git
6 years agowget: handle URLs with @ or hash differently
Denys Vlasenko [Tue, 24 Apr 2018 11:35:32 +0000 (13:35 +0200)]
wget: handle URLs with @ or hash differently

If server replied with 302 and

Location: ?foo

we used to underflow the allocated space while trying to form the "@foo"
filename. Switch to forming "foo" filename.

function                                             old     new   delta
packed_usage                                       32795   32799      +4
parse_url                                            387     352     -35
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 4/-35)             Total: -31 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agofree: improve --help for type option
Denys Vlasenko [Tue, 24 Apr 2018 08:13:45 +0000 (10:13 +0200)]
free: improve --help for type option

Patch by Fred Friedrich.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoawk: do not allow $(-1)
Denys Vlasenko [Mon, 23 Apr 2018 08:53:18 +0000 (10:53 +0200)]
awk: do not allow $(-1)

function                                             old     new   delta
EMSG_NEGATIVE_FIELD                                    -      25     +25
evaluate                                            3390    3403     +13
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/0 up/down: 38/0)               Total: 38 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoexamples/shutdown-1.0: an example of reboot which does not signal init
Denys Vlasenko [Fri, 20 Apr 2018 13:12:52 +0000 (15:12 +0200)]
examples/shutdown-1.0: an example of reboot which does not signal init

For one, my inits know nothing about the concept of "shutting down the system".

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agounlzma: fix another SEGV case
Denys Vlasenko [Thu, 19 Apr 2018 17:29:49 +0000 (19:29 +0200)]
unlzma: fix another SEGV case

function                                             old     new   delta
unpack_lzma_stream                                  1705    1717     +12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolibbb: new option FEATURE_ETC_SERVICES: if off, /etc/services reads often avoided
Denys Vlasenko [Tue, 17 Apr 2018 10:43:54 +0000 (12:43 +0200)]
libbb: new option FEATURE_ETC_SERVICES: if off, /etc/services reads often avoided

In practice, "wget http://host.com/" always uses port 80.
People explicitly set non-standard ports via options or parameters
("telnet 1.2.3.4 567" or "telnet 1.2.3.4 ftp") instead of modifying
/etc/services.

function                                             old     new   delta
telnet_main                                         1466    1464      -2
rdate_main                                           215     198     -17
fakeidentd_main                                      269     252     -17
parse_url                                            459     392     -67
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-103)           Total: -103 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agosetlogcons: open /dev/ttyN for "setlogcons N", not /dev/tty1
Denys Vlasenko [Mon, 16 Apr 2018 19:48:32 +0000 (21:48 +0200)]
setlogcons: open /dev/ttyN for "setlogcons N", not /dev/tty1

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agobuild system: FEATURE_NSLOOKUP_BIG needs -lresolv
Denys Vlasenko [Mon, 16 Apr 2018 09:04:03 +0000 (11:04 +0200)]
build system: FEATURE_NSLOOKUP_BIG needs -lresolv

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoless: fix fallout from "use common routine to set raw termios"
Denys Vlasenko [Mon, 16 Apr 2018 08:24:48 +0000 (10:24 +0200)]
less: fix fallout from "use common routine to set raw termios"

Testcase: (sleep 10; ls) | busybox less

[...]
~           LICENSE
~                  Makefile
~                          Makefile.custom
~                                         Makefile.flags
[...]

less did not want this part:
+ /* dont convert NL to CR+NL on output */
+ newterm->c_oflag &= ~(ONLCR);

function                                             old     new   delta
get_termios_and_make_raw                             108     115      +7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: simplify make_ptr
Denys Vlasenko [Sun, 15 Apr 2018 18:04:57 +0000 (20:04 +0200)]
nslookup: simplify make_ptr

function                                             old     new   delta
nslookup_main                                       2644    2611     -33

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: get rid of query::rlen field
Denys Vlasenko [Sun, 15 Apr 2018 17:51:42 +0000 (19:51 +0200)]
nslookup: get rid of query::rlen field

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoar: stop using static data
Denys Vlasenko [Sun, 15 Apr 2018 12:18:16 +0000 (14:18 +0200)]
ar: stop using static data

function                                             old     new   delta
static.ar_long_names                                   4       -      -4
static.ar_long_name_size                               4       -      -4
get_header_ar                                        546     532     -14
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 0/1 up/down: 0/-22)             Total: -22 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: move array of queries to "globals"
Denys Vlasenko [Sun, 15 Apr 2018 12:10:45 +0000 (14:10 +0200)]
nslookup: move array of queries to "globals"

function                                             old     new   delta
add_query                                             95      89      -6
nslookup_main                                       2692    2641     -51
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-57)             Total: -57 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoless: remove unnecessary message
Denys Vlasenko [Sun, 15 Apr 2018 11:14:51 +0000 (13:14 +0200)]
less: remove unnecessary message

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoless: implement -F
Aaro Koskinen [Sat, 14 Apr 2018 22:24:24 +0000 (01:24 +0300)]
less: implement -F

Implement -F option: Exit if entire file fits on first screen.

function                                             old     new   delta
buffer_print                                         622     633     +11
less_main                                           2446    2449      +3
buffer_fill_and_print                                169     172      +3
packed_usage                                       32258   32236     -22
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 17/-22)             Total: -5 bytes

Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: accept lowercase -type=soa, document query types
Denys Vlasenko [Sun, 15 Apr 2018 10:57:32 +0000 (12:57 +0200)]
nslookup: accept lowercase -type=soa, document query types

    Usage: nslookup [-type=QUERY_TYPE] [-debug] HOST [DNS_SERVER]

    Query DNS about HOST

    QUERY_TYPE: soa,ns,a,aaaa,cname,mx,txt,ptr,any

function                                             old     new   delta
packed_usage                                       32189   32258     +69

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: change -stats to -debug (it's a bug in bind that it accepts -s)
Denys Vlasenko [Sun, 15 Apr 2018 10:49:11 +0000 (12:49 +0200)]
nslookup: change -stats to -debug (it's a bug in bind that it accepts -s)

function                                             old     new   delta
packed_usage                                       32211   32189     -22
nslookup_main                                       2754    2692     -62
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-84)             Total: -84 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoapplets/install: don't try to install nothing
Yann E. MORIN [Sun, 15 Apr 2018 08:55:30 +0000 (10:55 +0200)]
applets/install: don't try to install nothing

Commit 952d5a6024e7 (applets/install: accept more than one install
option) changed the way we handle install options: before that commit, a
missing install type would mean to install nothing; after, we would
iterate over options, so we would never notice there was a mising
option.

Fix that by introducing an explicit --none option to specify to install
nothing.

Reported-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Cc: Aaro Koskinen <aaro.koskinen@iki.fi>
Cc: Denys Vlasenko <vda.linux@googlemail.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: rework option parsing
Denys Vlasenko [Sun, 15 Apr 2018 10:01:46 +0000 (12:01 +0200)]
nslookup: rework option parsing

function                                             old     new   delta
nslookup_main                                       2715    2754     +39
packed_usage                                       32179   32211     +32
add_ns                                                65      66      +1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 72/0)               Total: 72 bytes
   text    data     bss     dec     hex filename
 926262     555    5740  932557   e3acd busybox_old
 926239     555    5740  932534   e3ab6 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: smaller qtypes[] array
Denys Vlasenko [Sun, 15 Apr 2018 08:52:11 +0000 (10:52 +0200)]
nslookup: smaller qtypes[] array

function                                             old     new   delta
nslookup_main                                       2708    2715      +7
qtypes                                                80      72      -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 7/-8)               Total: -1 bytes
   text    data     bss     dec     hex filename
 926277     555    5740  932572   e3adc busybox_old
 926262     555    5740  932557   e3acd busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: process replies immediately, do not store them
Denys Vlasenko [Sun, 15 Apr 2018 08:46:44 +0000 (10:46 +0200)]
nslookup: process replies immediately, do not store them

function                                             old     new   delta
nslookup_main                                       1837    2708    +871
parse_reply                                          852       -    -852
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/0 up/down: 871/-852)           Total: 19 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: fix output corruption for "nslookup 1.2.3.4"
Denys Vlasenko [Sat, 14 Apr 2018 21:18:34 +0000 (23:18 +0200)]
nslookup: fix output corruption for "nslookup 1.2.3.4"

function                                             old     new   delta
nslookup_main                                       1832    1837      +5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: more closely resemble output format of bind-utils-9.11.3
Denys Vlasenko [Sat, 14 Apr 2018 21:08:23 +0000 (23:08 +0200)]
nslookup: more closely resemble output format of bind-utils-9.11.3

function                                             old     new   delta
nslookup_main                                       1880    1832     -48
parse_reply                                         1022     852    -170
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-218)           Total: -218 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: shrink send_queries()
Denys Vlasenko [Sat, 14 Apr 2018 20:53:39 +0000 (22:53 +0200)]
nslookup: shrink send_queries()

function                                             old     new   delta
rcodes                                                68      64      -4
nslookup_main                                       2007    1880    -127
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-131)           Total: -131 bytes
   text    data     bss     dec     hex filename
 926735     555    5740  933030   e3ca6 busybox_old
 926525     555    5740  932820   e3bd4 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: use xmalloc_sockaddr2dotted() instead of homegrown function
Denys Vlasenko [Sat, 14 Apr 2018 16:11:35 +0000 (18:11 +0200)]
nslookup: use xmalloc_sockaddr2dotted() instead of homegrown function

function                                             old     new   delta
nslookup_main                                       2091    2007     -84

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: usee bbox network functions instead of opne-coded mess
Denys Vlasenko [Sat, 14 Apr 2018 15:54:24 +0000 (17:54 +0200)]
nslookup: usee bbox network functions instead of opne-coded mess

function                                             old     new   delta
nslookup_main                                       2363    2091    -272
add_ns                                               663      65    -598
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-870)           Total: -870 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agopatch: implement --dry-run
Denys Vlasenko [Sat, 14 Apr 2018 14:05:26 +0000 (16:05 +0200)]
patch: implement --dry-run

function                                             old     new   delta
static.patch_longopts                                  -     137    +137
patch_main                                          2053    2135     +82
fail_hunk                                            132     139      +7
finish_oldfile                                       119     124      +5
packed_usage                                       32807   32787     -20
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/1 up/down: 231/-20)           Total: 211 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: expand: Fix buffer overflow in expandmeta
Denys Vlasenko [Sat, 14 Apr 2018 12:50:47 +0000 (14:50 +0200)]
ash: expand: Fix buffer overflow in expandmeta

Upstream commit:

    Date: Sun, 25 Mar 2018 16:38:00 +0800
    expand: Fix buffer overflow in expandmeta

    The native version of expandmeta allocates a buffer that may be
    overrun for two reasons.  First of all the size is 1 byte too small
    but this is normally hidden because the minimum size is rounded
    up to 2048 bytes.  Secondly, if the directory level is deep enough,
    any buffer can be overrun.

    This patch fixes both problems by calling realloc when necessary.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
function                                             old     new   delta
expmeta                                              517     635    +118
expandarg                                            990     996      +6
mklocal                                              288     290      +2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 126/0)             Total: 126 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonslookup: add openwrt / lede version
Denys Vlasenko [Sat, 14 Apr 2018 12:05:45 +0000 (14:05 +0200)]
nslookup: add openwrt / lede version

Needs work on size reduction

function                                             old     new   delta
nslookup_main                                        114    2363   +2249
parse_reply                                            -    1022   +1022
add_ns                                                 -     663    +663
ns_parserr                                             -     486    +486
ns_initparse                                           -     184    +184
ns_skiprr                                              -     117    +117
add_query                                              -      95     +95
qtypes                                                 -      80     +80
rcodes                                                 -      68     +68
dn_skipname                                            -      58     +58
ns_name_uncompress                                     -      56     +56
ns_get16                                               -      13     +13
v4_mapped                                              -      12     +12
ns_get32                                               -       9      +9
res_init                                               3       -      -3
__res_state                                            6       -      -6
xmalloc_sockaddr2hostonly_noport                      10       -     -10
gai_strerror                                          47       -     -47
set_default_dns                                       95       -     -95
print_host                                           199       -    -199
static.res                                           512       -    -512
------------------------------------------------------------------------------
(add/remove: 15/10 grow/shrink: 1/0 up/down: 5112/-872)      Total: 4240 bytes
   text    data     bss     dec     hex filename
 921944     555    6252  928751   e2bef busybox_old
 927375     555    5740  933670   e3f26 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agobuild system: fix parallel building issue
Michael Olbrich [Thu, 12 Apr 2018 08:36:54 +0000 (10:36 +0200)]
build system: fix parallel building issue

The files generated by the include/config/MARKER target are in the
dependency list for applets/applet_tables.
If applets/applet_tables is created first during applets_dir then it will
be created again later as part of $(busybox-dirs).
As a result include/applet_tables.h is created again. This time while other
build commands may need it.

Let applets_dir depend on include/config/MARKER to avoid this particular
race condition and create the header files atomically to ensure that the
compiler never sees incomplete files.

Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotart_stop_daemon: another fix to disabled OLDER_VERSION_OF_X code
Denys Vlasenko [Fri, 13 Apr 2018 23:29:01 +0000 (01:29 +0200)]
tart_stop_daemon: another fix to disabled OLDER_VERSION_OF_X code

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agostart_stop_daemon: fix normally disabled OLDER_VERSION_OF_X code
Denys Vlasenko [Fri, 13 Apr 2018 23:23:40 +0000 (01:23 +0200)]
start_stop_daemon: fix normally disabled OLDER_VERSION_OF_X code

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agodpkg: fix symlink creation, closes 10941
Denys Vlasenko [Fri, 13 Apr 2018 11:26:33 +0000 (13:26 +0200)]
dpkg: fix symlink creation, closes 10941

function                                             old     new   delta
get_header_ar                                        434     442      +8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoudhcp: support string user options, closes 10946
Denys Vlasenko [Fri, 13 Apr 2018 11:18:34 +0000 (13:18 +0200)]
udhcp: support string user options, closes 10946

function                                             old     new   delta
udhcp_str2optset                                     536     628     +92
packed_usage                                       32757   32760      +3
udhcpc_main                                         2708    2692     -16
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 95/-16)             Total: 79 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoshell: add 6856 $IFS tests to testsuites
Denys Vlasenko [Wed, 11 Apr 2018 18:24:58 +0000 (20:24 +0200)]
shell: add 6856 $IFS tests to testsuites

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix recent breakage from parse_stream() changes
Denys Vlasenko [Wed, 11 Apr 2018 18:00:43 +0000 (20:00 +0200)]
hush: fix recent breakage from parse_stream() changes

function                                             old     new   delta
parse_stream                                        3808    3821     +13

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix IFS handling in read
Denys Vlasenko [Wed, 11 Apr 2018 15:18:34 +0000 (17:18 +0200)]
hush: fix IFS handling in read

$ echo "X:Y:" | (IFS=": " read x y; echo "|$x|$y|")
|X|Y|
$ echo "X:Y  :  " | (IFS=": " read x y; echo "|$x|$y|")
|X|Y|

function                                             old     new   delta
shell_builtin_read                                  1320    1426    +106

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: IFS fixes
Denys Vlasenko [Wed, 11 Apr 2018 14:02:58 +0000 (16:02 +0200)]
hush: IFS fixes

$ IFS=": "; x=" "; set x $x; for v; do echo "|$v|"; done
|x|
$ IFS=": "; x=":"; set x $x; for v; do echo "|$v|"; done
|x|
||

function                                             old     new   delta
run_pipe                                            1789    1870     +81
expand_on_ifs                                        310     361     +51
pseudo_exec_argv                                     588     591      +3
builtin_local                                         50      53      +3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/0 up/down: 138/0)             Total: 138 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix "$v" expansion in case patterns when v='[a]'
Denys Vlasenko [Wed, 11 Apr 2018 11:47:59 +0000 (13:47 +0200)]
hush: fix "$v" expansion in case patterns when v='[a]'

function                                             old     new   delta
run_list                                            1053    1063     +10
setup_redirects                                      311     320      +9
encode_then_expand_string                            135     142      +7
run_pipe                                            1784    1789      +5
expand_assignments                                    81      86      +5
expand_string_to_string                              124     125      +1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 6/0 up/down: 37/0)               Total: 37 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: parser: Allow newlines within parameter substitution
Denys Vlasenko [Wed, 11 Apr 2018 10:39:18 +0000 (12:39 +0200)]
ash: parser: Allow newlines within parameter substitution

Upstream commit:

Date: Thu, 22 Mar 2018 21:41:24 +0800
parser: Allow newlines within parameter substitution

    On Fri, Mar 16, 2018 at 11:27:22AM +0800, Herbert Xu wrote:
    > On Thu, Mar 15, 2018 at 10:49:15PM +0100, Harald van Dijk wrote:
    > >
    > > Okay, it can be trivially modified to something that does work in other
    > > shells (even if it were actually executed), but gets rejected at parse time
    > > by dash:
    > >
    > >   if false; then
    > >     : ${$+
    > >   }
    > >   fi
    >
    > That's just a bug in dash's parser with ${} in general, because
    > it bombs out without the if clause too:
    >
    >  : ${$+
    >  }

    This patch fixes the parsing of newlines with parameter substitution.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: optimize parse_stream()
Denys Vlasenko [Tue, 10 Apr 2018 23:33:54 +0000 (01:33 +0200)]
hush: optimize parse_stream()

Since we check for '\' anyway when we determine whether we can look ahead,
we can just check for *and handle* it there.

function                                             old     new   delta
parse_stream                                        2751    2740     -11

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: do not drop backslash from eval 'echo ok\'
Denys Vlasenko [Tue, 10 Apr 2018 23:15:33 +0000 (01:15 +0200)]
hush: do not drop backslash from eval 'echo ok\'

newer bash does not drop it, most other shells too

function                                             old     new   delta
unbackslash                                           39      57     +18
parse_stream                                        2753    2751      -2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 18/-2)              Total: 16 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoshell: add comments about [[, no code changes
Denys Vlasenko [Tue, 10 Apr 2018 13:25:41 +0000 (15:25 +0200)]
shell: add comments about [[, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix handling of \<eof> in double-quoted strings
Denys Vlasenko [Tue, 10 Apr 2018 12:49:01 +0000 (14:49 +0200)]
hush: fix handling of \<eof> in double-quoted strings

function                                             old     new   delta
encode_string                                        268     250     -18

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix eval 'echo ok\'
Denys Vlasenko [Tue, 10 Apr 2018 12:40:23 +0000 (14:40 +0200)]
hush: fix eval 'echo ok\'

function                                             old     new   delta
parse_stream                                        2762    2753      -9

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: simplify \<newline> code, part 3
Denys Vlasenko [Tue, 10 Apr 2018 12:20:48 +0000 (14:20 +0200)]
hush: simplify \<newline> code, part 3

function                                             old     new   delta
parse_stream                                        2780    2762     -18

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: simplify \<newline> code, part 2
Denys Vlasenko [Tue, 10 Apr 2018 11:13:10 +0000 (13:13 +0200)]
hush: simplify \<newline> code, part 2

function                                             old     new   delta
parse_stream                                        2787    2780      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: simplify \<newline> code, part 1
Denys Vlasenko [Tue, 10 Apr 2018 11:09:26 +0000 (13:09 +0200)]
hush: simplify \<newline> code, part 1

function                                             old     new   delta
parse_stream                                        2919    2787    -132

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: put "current word" structure into parsing context
Denys Vlasenko [Tue, 10 Apr 2018 01:22:10 +0000 (03:22 +0200)]
hush: put "current word" structure into parsing context

function                                             old     new   delta
done_word                                            790     767     -23
parse_stream                                        3018    2919     -99
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-122)           Total: -122 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: if "[[" bashism is not supported, do not handle it anywhere
Denys Vlasenko [Mon, 9 Apr 2018 23:23:19 +0000 (01:23 +0200)]
ash: if "[[" bashism is not supported, do not handle it anywhere

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: trivial code shrink
Denys Vlasenko [Mon, 9 Apr 2018 23:20:26 +0000 (01:20 +0200)]
ash: trivial code shrink

function                                             old     new   delta
parse_command                                       1677    1674      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotestsuite: allow tests to work in paths containing spaces
Ron Yorston [Fri, 9 Feb 2018 09:52:52 +0000 (09:52 +0000)]
testsuite: allow tests to work in paths containing spaces

Tweak some tests so they work when the path to the test directory or
$HOME contains spaces.

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix var_leaks.tests and var_preserved.tests on NOMMU
Denys Vlasenko [Mon, 9 Apr 2018 17:05:11 +0000 (19:05 +0200)]
hush: fix var_leaks.tests and var_preserved.tests on NOMMU

function                                             old     new   delta
remove_nested_vars                                     -      77     +77
run_pipe                                            1756    1786     +30
pseudo_exec_argv                                     376     379      +3
leave_var_nest_level                                  98      32     -66
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/1 up/down: 110/-66)            Total: 44 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix func_return2.tests on NOMMU
Denys Vlasenko [Mon, 9 Apr 2018 15:54:07 +0000 (17:54 +0200)]
hush: fix func_return2.tests on NOMMU

function                                             old     new   delta
hush_main                                           1714    1718      +4

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agounlzma: fix segfault on bad archive
Denys Vlasenko [Sun, 8 Apr 2018 18:45:16 +0000 (20:45 +0200)]
unlzma: fix segfault on bad archive

function                                             old     new   delta
unpack_lzma_stream                                  2647    2653      +6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agobzip2: fix two crashes on corrupted archives
Denys Vlasenko [Sun, 8 Apr 2018 18:02:01 +0000 (20:02 +0200)]
bzip2: fix two crashes on corrupted archives

As it turns out, longjmp'ing into freed stack is not healthy...

function                                             old     new   delta
unpack_usage_messages                                  -      97     +97
unpack_bz2_stream                                    369     409     +40
get_next_block                                      1667    1677     +10
get_bits                                             156     155      -1
start_bunzip                                         212     183     -29
bb_show_usage                                        181     120     -61
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/3 up/down: 147/-91)            Total: 56 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agowget: check chunk length for overflowing off_t
Denys Vlasenko [Sun, 8 Apr 2018 16:06:24 +0000 (18:06 +0200)]
wget: check chunk length for overflowing off_t

function                                             old     new   delta
retrieve_file_data                                   428     465     +37
wget_main                                           2386    2389      +3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 40/0)               Total: 40 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolibbb.h: always include sys/resource.h
Denys Vlasenko [Sun, 8 Apr 2018 15:23:27 +0000 (17:23 +0200)]
libbb.h: always include sys/resource.h

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolzop: remove method checks which are always true/false
Denys Vlasenko [Sun, 8 Apr 2018 14:44:45 +0000 (16:44 +0200)]
lzop: remove method checks which are always true/false

function                                             old     new   delta
do_lzo_compress                                      232     224      -8
lzo_compress                                         531     488     -43
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-51)             Total: -51 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolzop: buffer several 32-bit writes when we start a new compressed block
Denys Vlasenko [Sun, 8 Apr 2018 14:31:02 +0000 (16:31 +0200)]
lzop: buffer several 32-bit writes when we start a new compressed block

function                                             old     new   delta
lzo_compress                                         483     531     +48

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolzop: reuse strings
Denys Vlasenko [Sun, 8 Apr 2018 12:00:03 +0000 (14:00 +0200)]
lzop: reuse strings

function                                             old     new   delta
lzo_compress                                         470     483     +13
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 13/0)               Total: 13 bytes
   text    data     bss     dec     hex filename
 940011     477    7284  947772   e763c busybox_old
 939976     477    7284  947737   e7619 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolzop: checksum reads do not need to be checksummed
Denys Vlasenko [Sun, 8 Apr 2018 11:45:04 +0000 (13:45 +0200)]
lzop: checksum reads do not need to be checksummed

function                                             old     new   delta
do_lzo_decompress                                    404     427     +23
f_read32                                              22       -     -22

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolzop: don't support ancient versions < 0.94 (15 Oct 1997)
Denys Vlasenko [Sun, 8 Apr 2018 11:35:28 +0000 (13:35 +0200)]
lzop: don't support ancient versions < 0.94 (15 Oct 1997)

0.94 came only 2 months after initial 0.90:

    0.90 (10 Aug 1997): First public release of lzop
    ...
    0.94 (15 Oct 1997): Header format change

function                                             old     new   delta
do_lzo_decompress                                    411     404      -7
f_read8                                               24       -     -24
f_read16                                              31       -     -31
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 0/1 up/down: 0/-62)             Total: -62 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolzop: code shrink by using header_t matching on-disk layout
Denys Vlasenko [Sun, 8 Apr 2018 11:32:47 +0000 (13:32 +0200)]
lzop: code shrink by using header_t matching on-disk layout

function                                             old     new   delta
add_bytes_to_chksum                                   37      47     +10
lzo_decompress                                       524     532      +8
init_chksum                                           14      21      +7
chksum_getresult                                      13      17      +4
f_read                                                33      28      -5
f_write8                                              20       -     -20
f_write32                                             22       -     -22
f_write16                                             25       -     -25
f_write                                               36       -     -36
do_lzo_compress                                      328     232     -96
do_lzo_decompress                                    526     411    -115
------------------------------------------------------------------------------
(add/remove: 0/4 grow/shrink: 4/3 up/down: 29/-319)          Total: -290 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotar: trim help text
Denys Vlasenko [Sat, 7 Apr 2018 19:04:39 +0000 (21:04 +0200)]
tar: trim help text

Usage: tar c|x|t [-ZzJjahmvokO] [-f TARFILE] [-C DIR] [-T FILE] [-X FILE] [--exclude PATTERN]... [FILE]...

Create, extract, or list files from a tar file

Operation:  <============== DELETED
    c Create
    x Extract
    t List
    -f FILE Name of TARFILE ('-' for stdin/out)
    -C DIR Change to DIR before operation
    -v Verbose
    -O Extract to stdout
    -m Don't restore mtime
    -o Don't restore user:group
    -k Don't replace existing files
    -Z (De)compress using compress
    -z (De)compress using gzip
    -J (De)compress using xz
    -j (De)compress using bzip2
    -a (De)compress using lzma
    -h Follow symlinks
    -T FILE File with names to include
    -X FILE File with glob patterns to exclude
    --exclude PATTERN Glob pattern to exclude

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix prompt in multi-line $(())
Denys Vlasenko [Sat, 7 Apr 2018 15:01:31 +0000 (17:01 +0200)]
hush: fix prompt in multi-line $(())

Now shows PS2 in this case:

/path/to/dir $ a=b; echo $((
> _

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolibbb: switch bb_ask_noecho() to "mallocing" string return API
Denys Vlasenko [Sat, 7 Apr 2018 13:50:30 +0000 (15:50 +0200)]
libbb: switch bb_ask_noecho() to "mallocing" string return API

function                                             old     new   delta
bb_ask_noecho                                        313     330     +17
get_cred_or_die                                      125     115     -10
passwd_main                                          995     958     -37
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/2 up/down: 17/-47)            Total: -30 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoxargs: use bb_ask_y_confirmation_FILE() instead of homegrown copy
Denys Vlasenko [Sat, 7 Apr 2018 13:21:35 +0000 (15:21 +0200)]
xargs: use bb_ask_y_confirmation_FILE() instead of homegrown copy

function                                             old     new   delta
bb_ask_y_confirmation_FILE                             -      83     +83
inetd_main                                          2033    2043     +10
udhcp_send_kernel_packet                             295     301      +6
rmescapes                                            306     310      +4
send_tree                                            353     355      +2
i2cdetect_main                                       674     672      -2
confirm_or_abort                                      43      38      -5
get_terminal_width_height                            242     234      -8
bb_ask_y_confirmation                                 76      10     -66
xargs_main                                           823     755     -68
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/5 up/down: 105/-149)          Total: -44 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolibbb: rename bb_ask -> bb_ask_noecho, bb_ask_confirmation -> bb_ask_y_confirmation
Denys Vlasenko [Sat, 7 Apr 2018 13:08:12 +0000 (15:08 +0200)]
libbb: rename bb_ask -> bb_ask_noecho, bb_ask_confirmation -> bb_ask_y_confirmation

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotelnet: move winsize detection closer to I/O loop, delete non-functioning debug code
Denys Vlasenko [Sat, 7 Apr 2018 13:02:20 +0000 (15:02 +0200)]
telnet: move winsize detection closer to I/O loop, delete non-functioning debug code

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoftpd: allow -A if !FTPD_AUTHENTICATION as well
Denys Vlasenko [Sat, 7 Apr 2018 12:18:42 +0000 (14:18 +0200)]
ftpd: allow -A if !FTPD_AUTHENTICATION as well

Users will be able to use "ftpd -A" in scripts regardless of build config

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoftpd: added -A option to disable all authentication, closes 10921
Denys Vlasenko [Sat, 7 Apr 2018 12:02:21 +0000 (14:02 +0200)]
ftpd: added -A option to disable all authentication, closes 10921

function                                             old     new   delta
packed_usage                                       32745   32777     +32
ftpd_main                                           2162    2156      -6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 32/-6)              Total: 26 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agowget,ftpd: shorten and reuse strings
Denys Vlasenko [Sat, 7 Apr 2018 11:22:52 +0000 (13:22 +0200)]
wget,ftpd: shorten and reuse strings

function                                             old     new   delta
wget_main                                           2382    2386      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 4/0)                 Total: 4 bytes
   text    data     bss     dec     hex filename
 934228     477    7296  942001   e5fb1 busybox_old
 934202     477    7296  941975   e5f97 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohttpd: do not default to Content-type: application/octet-stream
Denys Vlasenko [Fri, 6 Apr 2018 23:13:30 +0000 (01:13 +0200)]
httpd: do not default to Content-type: application/octet-stream

Instead, simply don't send this header.

On Mon, Apr 2, 2018 at 8:17 PM, xisd <xisd-dev@riseup.net> wrote:
> I had some trouble using busybox httpd to serve a static website and I
> thought the issue might be of interest.
>
> My problem is related to something that seem quite common for static
> site generator :  the use of html files without the '.html' extension
> (it is called 'clean url'...)
>
> Most web server guess that these files are html and display them like
> any other .html files.
>
> From what I understood, the MIME type for files without extension in
> busybox htttp default settings is 'application/octet-stream', and
> because of that 'clean url' pages are not displayed.
>
> It is only trouble because I wanted to deploy my website on freshly
> installed linux without editing any configuration.
>
> The default MIME setting make sense to me as it is, I just thought that
> might be worth mentioning since the use of 'clean url' seem to be a
> common practice for static sites generators (the one I use is callled
> 'yellow' (https://github.com/datenstrom/yellow))
>
> Here is a link for the related issue on github :
> https://github.com/datenstrom/yellow/issues/317

function                                             old     new   delta
send_headers                                         702     718     +16
send_headers_and_exit                                 23      20      -3
handle_incoming_and_exit                            2794    2791      -3
send_file_and_exit                                   772     756     -16
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 16/-22)             Total: -6 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoscripts/kconfig/mconf.c: survive is SIGWINCH is not defined
Denys Vlasenko [Fri, 6 Apr 2018 17:05:53 +0000 (19:05 +0200)]
scripts/kconfig/mconf.c: survive is SIGWINCH is not defined

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoi386: make stack size optimization selectable, and allow i486 insns (bswap)
Denys Vlasenko [Fri, 6 Apr 2018 16:55:35 +0000 (18:55 +0200)]
i386: make stack size optimization selectable, and allow i486 insns (bswap)

It's hard to imagine someone still using non-bswap equipped CPU

function                                             old     new   delta
xmalloc_optname_optval                               888     879      -9
write_leases                                         214     205      -9
write32                                               36      27      -9
update_status                                        612     603      -9
udhcpd_main                                         1468    1459      -9
udhcpc_main                                         2708    2699      -9
udhcp_run_script                                     804     795      -9
sha256_process_block64                               423     414      -9
sha1_process_block64                                 337     328      -9
sha1_end                                              80      71      -9
send_ACK                                             161     152      -9
select_lease_time                                     64      55      -9
rpm_getint                                           118     109      -9
readprofile_main                                    1719    1710      -9
read32                                                33      24      -9
rdate_main                                           236     227      -9
machtime                                              39      30      -9
inet_addr_match                                      103      94      -9
get_prefix                                           344     335      -9
f_write32                                             31      22      -9
f_read32                                              31      22      -9
dumpleases_main                                      620     611      -9
KeyExpansion                                         197     188      -9
udhcp_str2optset                                     536     518     -18
read_config                                          222     204     -18
lfp_to_d                                              55      37     -18
ipaddr_modify                                       1226    1208     -18
dnsd_main                                           1278    1260     -18
des_crypt                                           1344    1326     -18
d_to_lfp                                             106      88     -18
bb_bswap_64                                           29      11     -18
INET_setroute                                        827     809     -18
read_leases                                          330     309     -21
zcip_main                                           1256    1229     -27
send_offer                                           476     449     -27
ipcalc_main                                          534     507     -27
handle_incoming_and_exit                            2821    2794     -27
fmt_time_bernstein_25                                131     104     -27
common_traceroute_main                              3804    3768     -36
rpm_gettags                                          451     397     -54
parse_args                                          1412    1358     -54
volume_id_probe_hfs_hfsplus                          627     564     -63
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/42 up/down: 0/-732)          Total: -732 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoplacate gcc-8.0.1 warnings
Denys Vlasenko [Fri, 6 Apr 2018 16:26:33 +0000 (18:26 +0200)]
placate gcc-8.0.1 warnings

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix "unset PS1/PS2", and put them into initial variable set
Denys Vlasenko [Fri, 6 Apr 2018 15:58:21 +0000 (17:58 +0200)]
hush: fix "unset PS1/PS2", and put them into initial variable set

"unset PS1/PS2" causes prompts to be empty strings

function                                             old     new   delta
hush_main                                           1031    1089     +58
goto_new_line                                         27      33      +6
fgetc_interactive                                    244     245      +1
unset_local_var                                      155     149      -6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 65/-6)              Total: 59 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agosort: smaller and more agressive FEATURE_SORT_OPTIMIZE_MEMORY
Denys Vlasenko [Fri, 6 Apr 2018 14:44:50 +0000 (16:44 +0200)]
sort: smaller and more agressive FEATURE_SORT_OPTIMIZE_MEMORY

function                                             old     new   delta
sort_main                                           1098    1037     -61

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: if we did match "LINENO" or "OPTIND", stop further comparisons
Denys Vlasenko [Fri, 6 Apr 2018 12:57:53 +0000 (14:57 +0200)]
hush: if we did match "LINENO" or "OPTIND", stop further comparisons

function                                             old     new   delta
handle_changed_special_names                          99     101      +2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: consolidate handling of setting/unsetting of PSn, LINENO, OPTIND
Denys Vlasenko [Fri, 6 Apr 2018 12:50:12 +0000 (14:50 +0200)]
hush: consolidate handling of setting/unsetting of PSn, LINENO, OPTIND

function                                             old     new   delta
handle_changed_special_names                           -      99     +99
unset_local_var                                      256     155    -101
set_local_var                                        557     437    -120
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/2 up/down: 99/-221)          Total: -122 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: update to correctly handle changed var_bash[346].tests
Denys Vlasenko [Thu, 5 Apr 2018 15:04:53 +0000 (17:04 +0200)]
hush: update to correctly handle changed var_bash[346].tests

function                                             old     new   delta
expand_one_var                                      1612    1604      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: implement "hush -s"
Denys Vlasenko [Thu, 5 Apr 2018 14:46:49 +0000 (16:46 +0200)]
hush: implement "hush -s"

function                                             old     new   delta
hush_main                                           1015    1031     +16
packed_usage                                       32757   32745     -12
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 16/-12)              Total: 4 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoplacate gcc 8.0.1 sprintf overflow warnings in config tools
Denys Vlasenko [Thu, 5 Apr 2018 13:21:34 +0000 (15:21 +0200)]
placate gcc 8.0.1 sprintf overflow warnings in config tools

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix a few more corner cases with empty-expanding `cmds`
Denys Vlasenko [Thu, 5 Apr 2018 13:15:53 +0000 (15:15 +0200)]
hush: fix a few more corner cases with empty-expanding `cmds`

See added testcases

function                                             old     new   delta
run_pipe                                            1723    1784     +61

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix corner cases with exec in empty expansions
Denys Vlasenko [Thu, 5 Apr 2018 12:41:21 +0000 (14:41 +0200)]
hush: fix corner cases with exec in empty expansions

Cases like these:

var=val exec >redir

var=val `` >redir

function                                             old     new   delta
run_pipe                                            1701    1723     +22
redirect_and_varexp_helper                            56      55      -1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 22/-1)              Total: 21 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: less mind-bending set_vars_and_save_old()
Denys Vlasenko [Thu, 5 Apr 2018 12:09:14 +0000 (14:09 +0200)]
hush: less mind-bending set_vars_and_save_old()

function                                             old     new   delta
run_pipe                                            1651    1701     +50
set_local_var                                        510     557     +47
pseudo_exec_argv                                     544     581     +37
redirect_and_varexp_helper                            64      56      -8
set_vars_and_save_old                                164     149     -15
unset_local_var                                      274     256     -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/3 up/down: 134/-41)            Total: 93 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: "no logic changes" in last commit was not true, fix it up
Denys Vlasenko [Thu, 5 Apr 2018 11:10:34 +0000 (13:10 +0200)]
hush: "no logic changes" in last commit was not true, fix it up

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: make run_pipe code simpler to understand, no logic changes
Denys Vlasenko [Thu, 5 Apr 2018 09:30:17 +0000 (11:30 +0200)]
hush: make run_pipe code simpler to understand, no logic changes

function                                             old     new   delta
run_pipe                                            1641    1651     +10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix a bug where we don't properly handle f() { a=A; b=B; }; a= f
Denys Vlasenko [Wed, 4 Apr 2018 22:51:55 +0000 (00:51 +0200)]
hush: fix a bug where we don't properly handle f() { a=A; b=B; }; a= f

function                                             old     new   delta
unset_local_var                                       20     274    +254
leave_var_nest_level                                   -      98     +98
set_vars_and_save_old                                128     164     +36
enter_var_nest_level                                   -      32     +32
builtin_local                                         46      50      +4
pseudo_exec_argv                                     554     544     -10
redirect_and_varexp_helper                            77      64     -13
run_pipe                                            1890    1641    -249
unset_local_var_len                                  267       -    -267
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 3/3 up/down: 424/-539)         Total: -115 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: make var nesting code independent of "local" support
Denys Vlasenko [Wed, 4 Apr 2018 20:32:59 +0000 (22:32 +0200)]
hush: make var nesting code independent of "local" support

Also, add code to abort at ~65000 function recursion depth.
SEGVing is not as nice as exiting with a message (and restoring termios!):

$ f() { echo -n .; f; }; f
....<many dots later>....hush: fatal recursion (depth 65281)

function                                             old     new   delta
run_pipe                                            1826    1890     +64
pseudo_exec_argv                                     544     554     +10
parse_and_run_file                                    71      80      +9
i_getch                                              104     107      +3
done_command                                          99     102      +3
set_local_var                                        508     510      +2
helper_export_local                                  214     215      +1
builtin_local                                         49      46      -3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 7/1 up/down: 92/-3)              Total: 89 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix for readonly vars in "ro=A ro=B cmd" case
Denys Vlasenko [Wed, 4 Apr 2018 19:14:28 +0000 (21:14 +0200)]
hush: fix for readonly vars in "ro=A ro=B cmd" case

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agosort: move misplaced comment
Denys Vlasenko [Wed, 4 Apr 2018 15:07:21 +0000 (17:07 +0200)]
sort: move misplaced comment

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agosort: FEATURE_SORT_OPTIMIZE_MEMORY
Denys Vlasenko [Wed, 4 Apr 2018 15:02:32 +0000 (17:02 +0200)]
sort: FEATURE_SORT_OPTIMIZE_MEMORY

On sorting all kernel/linux/arch/ *.[ch] files,
this reduces memory usage by 6%.

yes | head -99999999 | sort

goes down from 1900Mb to 380 Mb.

function                                             old     new   delta
sort_main                                            862    1098    +236

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: unbreak PS1 parsing after "ash: parser: Add syntax stack..." commit
Denys Vlasenko [Wed, 4 Apr 2018 11:59:53 +0000 (13:59 +0200)]
ash: unbreak PS1 parsing after "ash: parser: Add syntax stack..." commit

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: support "f() (cmd)" functions
Denys Vlasenko [Tue, 3 Apr 2018 12:56:52 +0000 (14:56 +0200)]
hush: support "f() (cmd)" functions

Many other shells support this construct

function                                             old     new   delta
parse_stream                                        2950    3018     +68

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix mishandling of "true | f() { echo QWE; }"
Denys Vlasenko [Tue, 3 Apr 2018 11:02:43 +0000 (13:02 +0200)]
hush: fix mishandling of "true | f() { echo QWE; }"

function                                             old     new   delta
run_pipe                                            1820    1826      +6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: fix "set -e; false || x=1; echo OK"
Denys Vlasenko [Tue, 3 Apr 2018 09:21:13 +0000 (11:21 +0200)]
hush: fix "set -e; false || x=1; echo OK"

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: one-word, no-globbing handling of local/export/readonly args
Denys Vlasenko [Tue, 3 Apr 2018 06:20:58 +0000 (08:20 +0200)]
hush: one-word, no-globbing handling of local/export/readonly args

function                                             old     new   delta
done_word                                            738     790     +52

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: parser: Fix parameter expansion inside inner double quotes
Denys Vlasenko [Mon, 2 Apr 2018 19:00:59 +0000 (21:00 +0200)]
ash: parser: Fix parameter expansion inside inner double quotes

Upstream email:

    parser: Fix parameter expansion inside inner double quotes

    The parsing of parameter expansion inside inner double quotes
    breaks because we never look for ENDVAR while innerdq is true.

            echo "${x#"${x+''}"''}

    This patch fixes it by pushing the syntax stack if innerdq is
    true and we enter a new parameter expansion.

    This patch also fixes a corner case where a bad substitution error
    occurs within arithmetic expansion.

Reported-by: Denys Vlasenko <vda.linux@googlemail.com>
    Fixes: ab1cecb40478 (" parser: Add syntax stack for recursive...")
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
function                                             old     new   delta
readtoken1                                          2880    2898     +18

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>