oweals/busybox.git
7 years agoshell: make standalone shell tab-complete "busybox"
Denys Vlasenko [Fri, 28 Jul 2017 22:59:24 +0000 (00:59 +0200)]
shell: make standalone shell tab-complete "busybox"

function                                             old     new   delta
busybox_main                                           -     624    +624
packed_usage                                       31758   31777     +19
applet_names                                        2638    2646      +8
applet_main                                         1528    1532      +4
applet_install_loc                                   191     192      +1
run_applet_and_exit                                  681      78    -603
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/1 up/down: 656/-603)           Total: 53 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: support platforms that don't have '%m' printf specifier
Ron Yorston [Thu, 27 Jul 2017 12:53:39 +0000 (13:53 +0100)]
ash: support platforms that don't have '%m' printf specifier

The '%m' conversion specifier prints an error message based on the
current value of 'errno'.  It is available in the GNU C library,
Cygwin (since 2012), uClibc and musl.

It is not available in various BSDs, BSD-derived systems (MacOS,
Android) or Microsoft Windows.

Use a symbol defined in platform.h to control how error messages
can be formatted to display the 'errno' message.  On platforms that
support it use '%m'; on other platforms use '%s' and strerror().

On platforms that have '%m' there is essentially no change in the
size of the binary.  Otherwise:

function                                             old     new   delta
redirect                                            1287    1310     +23
xtcsetpgrp                                            27      44     +17
dup2_or_raise                                         34      51     +17
setinputfile                                         267     275      +8
.rodata                                           163379  163371      -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/1 up/down: 65/-8)              Total: 57 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: less hackish implementation of evaltreenr()
Denys Vlasenko [Fri, 28 Jul 2017 13:28:33 +0000 (15:28 +0200)]
ash: less hackish implementation of evaltreenr()

Defining a function alias with __attribute__ ((alias("evaltree"),__noreturn__))
is not that usual, and clang had a bug which made it misunderstand
this construct.

Switch to:
ALWAYS_INLINE NORETURN evaltreenr() { evaltree(); unreachable(); }

Older gcc's do not know unreachable(), on them we pay the price of having
a few extra calls to abort():

function                                             old     new   delta
evalsubshell                                         151     156      +5
evalpipe                                             357     362      +5
argstr                                              1141    1144      +3

On newer gcc, code size does not change.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agounzip: fix regression on big-endian machines
Natanael Copa [Tue, 25 Jul 2017 18:44:50 +0000 (20:44 +0200)]
unzip: fix regression on big-endian machines

This fixes a regression which was introduced with commit 2a0867a5
("unzip: optional support for bzip2 and lzma") and causes unzip to exit
with error when extracting archives:

  unzip: unsupported method 2048

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoconfig: more tweaking of help texts
Denys Vlasenko [Thu, 27 Jul 2017 12:45:25 +0000 (14:45 +0200)]
config: more tweaking of help texts

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agordate: tweak comments, no code changes
Denys Vlasenko [Thu, 27 Jul 2017 12:31:59 +0000 (14:31 +0200)]
rdate: tweak comments, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoinetd: improve --helpt text and config help text.
Denys Vlasenko [Thu, 27 Jul 2017 11:34:51 +0000 (13:34 +0200)]
inetd: improve --helpt text and config help text.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agotweak examples/var_service/*
Denys Vlasenko [Thu, 27 Jul 2017 10:53:20 +0000 (12:53 +0200)]
tweak examples/var_service/*

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoed: fix "\n" removal in command line; make "w" set "dirty = 0"
Denys Vlasenko [Thu, 27 Jul 2017 10:34:56 +0000 (12:34 +0200)]
ed: fix "\n" removal in command line; make "w" set "dirty = 0"

function                                             old     new   delta
doCommands                                          2184    2226     +42
getNum                                               345     343      -2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 42/-2)              Total: 40 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoed: code shrink
Denys Vlasenko [Thu, 27 Jul 2017 09:58:25 +0000 (11:58 +0200)]
ed: code shrink

function                                             old     new   delta
findString                                           117     115      -2
skip_blank                                            16       -     -16
getNum                                               369     345     -24
doCommands                                          2448    2183    -265
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/3 up/down: 0/-307)           Total: -307 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoed: fix --help and reorder functions, no code changes
Denys Vlasenko [Thu, 27 Jul 2017 09:17:15 +0000 (11:17 +0200)]
ed: fix --help and reorder functions, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoswapon: do not use FEATURE_MOUNT_LABEL, have your own FEATURE_SWAPONOFF_LABEL
Denys Vlasenko [Thu, 27 Jul 2017 08:58:08 +0000 (10:58 +0200)]
swapon: do not use FEATURE_MOUNT_LABEL, have your own FEATURE_SWAPONOFF_LABEL

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoconfig: trim/improve item names and help texts, take 2
Denys Vlasenko [Thu, 27 Jul 2017 08:53:09 +0000 (10:53 +0200)]
config: trim/improve item names and help texts, take 2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoconfig: trim/improve item names and help texts.
Denys Vlasenko [Thu, 27 Jul 2017 00:59:13 +0000 (02:59 +0200)]
config: trim/improve item names and help texts.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: force inlining of a trivial function
Denys Vlasenko [Wed, 26 Jul 2017 21:08:36 +0000 (23:08 +0200)]
ash: force inlining of a trivial function

function                                             old     new   delta
bltinlookup                                            5       -      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: revert previous implementation of "A=1 A=2 B=$A cmd" code
Denys Vlasenko [Wed, 26 Jul 2017 21:03:21 +0000 (23:03 +0200)]
ash: revert previous implementation of "A=1 A=2 B=$A cmd" code

Reverts this:

    commit 0e6f661e23d358cca104c24f8438d0ec64df32f1
    Date:   Fri Feb 15 15:02:15 2008 +0000
    ash: handle "A=1 A=2 B=$A; echo $B". closes bug 947.

A different fix from upstream has been imported by previous six commits.

Last seven commits, cumulative:

function                                             old     new   delta
poplocalvars                                           -     314    +314
mklocal                                                -     288    +288
pushlocalvars                                          -      48     +48
evalcommand                                         1372    1408     +36
unwindlocalvars                                        -      22     +22
ash_main                                            1022    1029      +7
setvar                                               167     172      +5
localvar_stack                                         -       4      +4
setvareq                                             303     302      -1
evalcase                                             271     269      -2
subevalvar                                          1202    1198      -4
localvars                                              4       -      -4
cmdenviron                                             4       -      -4
expandarg                                            984     973     -11
evalvar                                              589     574     -15
argstr                                              1164    1141     -23
dotcmd                                               335     303     -32
bltinlookup                                           51       5     -46
varvalue                                             709     596    -113
evalfun                                              456     270    -186
localcmd                                             364      44    -320
------------------------------------------------------------------------------
(add/remove: 5/2 grow/shrink: 3/11 up/down: 724/-761)         Total: -37 bytes
   text    data     bss     dec     hex filename
 915353     485    6888  922726   e1466 busybox_old
 915320     485    6880  922685   e143d busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: [VAR] Fix loss of variables when hash collides
Denys Vlasenko [Wed, 26 Jul 2017 18:06:48 +0000 (20:06 +0200)]
ash: [VAR] Fix loss of variables when hash collides

Upstream commit:

    Date: Tue, 6 Jul 2010 17:40:53 +0800
    [VAR] Fix loss of variables when hash collides

    Brian Koropoff reported that the new var patches broke the following
    script:

    #!/bin/dash
    GDM_LANG="bar"
    OPTION="foo"
    unset GDM_LANG
    # OPTION has mysteriously become unset
    echo "$OPTION"

    He correctly diagnosed this as a result of removing all variables
    in the hash chain preceding the one that should be removed in
    setvareq.

    He also provided a patch to fix this.

    This patch is based on his but without keeping the original vpp.
    As a result, we now store new variables at the end of the hash
    chain instead of the beginning.

    To make this work, setvareq/setvar now returns the vp pointer
    modified.  In case they're used to unset a variable the pointer
    returned is undefined.  This is because mklocal needs it and
    used to get it by assuming that the new variable always appear
    at the beginning of the chain.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: [VAR] Do not poplocalvars prematurely on regular utilities
Denys Vlasenko [Wed, 26 Jul 2017 18:00:08 +0000 (20:00 +0200)]
ash: [VAR] Do not poplocalvars prematurely on regular utilities

Upstream commit:

    Date: Thu, 27 May 2010 11:50:19 +0800
    [VAR] Do not poplocalvars prematurely on regular utilities

    The recent cmdenviron removal broke regular utilities by calling
    poplocalvars too early.  This patch fixes that by postponing the
    poplocalvars for regular utilities until they have completed.

    In order to ensure that local still works, it is now a special
    built-in.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: [VAR] Fix poplocalvar on abnormal exit from function
Denys Vlasenko [Wed, 26 Jul 2017 17:55:31 +0000 (19:55 +0200)]
ash: [VAR] Fix poplocalvar on abnormal exit from function

Upstream commit:

    Date: Thu, 27 May 2010 11:32:55 +0800
    [VAR] Fix poplocalvar on abnormal exit from function

    The new localvar code broke the abnormal exit from functions
    and built-ins by not restoring the original localvar state.

    This patch fixes this by storing the previous localvar state so
    that we always unwind correctly in case of an abnormal exit.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: [VAR] Replace cmdenviron with localvars
Denys Vlasenko [Wed, 26 Jul 2017 17:53:11 +0000 (19:53 +0200)]
ash: [VAR] Replace cmdenviron with localvars

Upstream commit:

    Date: Wed, 26 May 2010 18:54:19 +0800
    [VAR] Replace cmdenviron with localvars

    This patch replaces the cmdenviron mechanism for temporary command
    variables with the localvars mechanism used by functions.

    This reduces code size, and more importantly, makes the variable
    assignment take effect immediately as required by POSIX.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: [VAR] Fix poplocalvar leak
Denys Vlasenko [Wed, 26 Jul 2017 17:25:40 +0000 (19:25 +0200)]
ash: [VAR] Fix poplocalvar leak

Upstream commit:

    Date: Tue, 25 May 2010 18:14:32 +0800
    [VAR] Fix poplocalvar leak

    When a variable is marked as local, we set VSTRFIXED on its vp
    recored.  However, poplocalvar never clears this flag for variables
    that were unset to begin with.  Thus if you ever made an unset
    variable local, it would get the VSTRFIXED bit and stick around
    forever.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: [VAR] Add localvars nesting
Denys Vlasenko [Wed, 26 Jul 2017 17:22:34 +0000 (19:22 +0200)]
ash: [VAR] Add localvars nesting

Upstream commit:

    Date: Mon, 24 May 2010 15:31:27 +0800
    [VAR] Add localvars nesting

    This patch adds localvars nesting infrastructure so we can reuse
    the localvars mechanism for command evaluation.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: alloc slightly smaller buffer in cvtnum(); faster unsetvar()
Denys Vlasenko [Wed, 26 Jul 2017 12:38:19 +0000 (14:38 +0200)]
ash: alloc slightly smaller buffer in cvtnum(); faster unsetvar()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: fix redir_leak.tests if STANDALONE=y
Denys Vlasenko [Wed, 26 Jul 2017 11:42:53 +0000 (13:42 +0200)]
ash: fix redir_leak.tests if STANDALONE=y

If STANDALONE and we run a NOEXEC applet, saved copies of redirected fds
were visible for the child. They have CLOEXEC bit, yes, but we do not exec
in this case.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoshell: remove ${#+} tests, it is not a valid construct
Denys Vlasenko [Tue, 25 Jul 2017 22:30:02 +0000 (00:30 +0200)]
shell: remove ${#+} tests, it is not a valid construct

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: fix ${##}, ${#?}, ${#!} handling
Denys Vlasenko [Tue, 25 Jul 2017 22:07:27 +0000 (00:07 +0200)]
hush: fix ${##}, ${#?}, ${#!} handling

function                                             old     new   delta
parse_dollar                                         786     820     +34
expand_one_var                                      1579    1592     +13
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 47/0)               Total: 47 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: [SHELL] Optimize dash -c "command" to avoid a fork
Denys Vlasenko [Tue, 25 Jul 2017 18:31:14 +0000 (20:31 +0200)]
ash: [SHELL] Optimize dash -c "command" to avoid a fork

Upstream commit:

    Date: Thu, 7 Jul 2011 13:58:48 +0800
    [SHELL] Optimize dash -c "command" to avoid a fork

    On Sun, Apr 10, 2011 at 07:36:49AM +0000, Jonathan Nieder wrote:
    > From: Jilles Tjoelker <jilles@stack.nl>
    > Date: Sat, 13 Jun 2009 16:17:45 -0500
    >
    > This change only affects strings passed to -c, when the -s option is
    > not used.
    >
    > Use the EV_EXIT flag to inform the eval machinery that the string
    > being passed is the entirety of input.  This way, a fork may be
    > omitted in many special cases.
    >
    > If there are empty lines after the last command, the evalcmd will not
    > see the end early enough and forks will not be omitted. The same thing
    > seems to happen in bash.
    >
    > Example:
    >   sh -c 'ps lT'
    > No longer shows a shell process waiting for ps to finish.
    >
    > [jn: ported from FreeBSD SVN r194128.  Bugs are mine.]
    >
    > Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>

    Instead of detecting EOF using the input layer, I'm going to
    use the parser instead.  In either case, we always have to read
    ahead in order to complete the parsing of the previous node.
    Therefore we always know whether there is more to come, except
    in the case where we see a newline/semicolon or similar.

    For the purposes of sh -c, this should be sufficient.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
function                                             old     new   delta
evalstring                                           190     224     +34
ash_main                                            1014    1022      +8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 42/0)               Total: 42 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: allow "trap NUM [SIG]..." syntax
Denys Vlasenko [Tue, 25 Jul 2017 18:06:17 +0000 (20:06 +0200)]
ash: allow "trap NUM [SIG]..." syntax

While at it, make get_signum() return -1 for numeric strings >= NSIG.

function                                             old     new   delta
trapcmd                                              292     306     +14
get_signum                                           295     300      +5
builtin_trap                                         413     412      -1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 19/-1)              Total: 18 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: [REDIR] Replace GPL noclobberopen code with the FreeBSD version
Denys Vlasenko [Tue, 25 Jul 2017 15:47:48 +0000 (17:47 +0200)]
ash: [REDIR] Replace GPL noclobberopen code with the FreeBSD version

Upstream commit:

    Date: Thu, 10 Mar 2011 16:52:13 +0800
    [REDIR] Replace GPL noclobberopen code with the FreeBSD version

    Replace noclobberopen() from bash with the FreeBSD code for noclobber
    opens.

    This also reduces code size by eliminating an unnecessary check.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
function                                             old     new   delta
changepath                                           192     194      +2
localcmd                                             366     364      -2
expmeta                                              521     517      -4
redirect                                            1210    1135     -75
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 2/-81)             Total: -79 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: sync up with dash with respect to redirection escaping
Denys Vlasenko [Tue, 25 Jul 2017 15:37:57 +0000 (17:37 +0200)]
ash: sync up with dash with respect to redirection escaping

We fixed the problem differently than they. Let's not deviate.

Upstream commit:

    Date: Thu, 27 May 2010 20:07:29 +1000
    [EXPAND] Fix corruption of redirections with byte 0x81

    In other ash variants, a partial implementation of ksh-like cmd >file*
    adds and removes CTLESC bytes ('\x81') in redirection filenames,
    preserving 8-bit transparency. Long ago, dash removed the code to add
    the CTLESC bytes, but not the code to remove them, causing corruption of
    filenames containing CTLESC. This commit removes the code to remove the
    CTLESC bytes.

    The CTLESC byte occurs frequently in UTF-8 encoded non-Latin text.

    This bug has been reported various times to Ubuntu and Debian (e.g.
    Launchpad Ubuntu #422298). This patch is the same as the one submitted
    by Alexander Korolkov in Ubuntu #422298.

Signed-off-by: Jilles Tjoelker <jilles@stack.nl>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
function                                             old     new   delta
changepath                                           194     192      -2
expandarg                                           1000     984     -16
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-18)             Total: -18 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: [VAR] Move unsetvar functionality into setvareq
Denys Vlasenko [Tue, 25 Jul 2017 14:29:36 +0000 (16:29 +0200)]
ash: [VAR] Move unsetvar functionality into setvareq

Upstream commit:

    Date: Tue, 25 May 2010 20:55:05 +0800
    [VAR] Move unsetvar functionality into setvareq

    This patch moves the unsetvar code into setvareq so that we can
    no have a pathological case of an unset variable hanging around
    unless it has a bit pinning it like VEXPORT.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
function                                             old     new   delta
setvareq                                             227     303     +76
expmeta                                              517     521      +4
localcmd                                             364     366      +2
unsetcmd                                              96      76     -20
unsetvar                                             129       7    -122
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/2 up/down: 82/-142)           Total: -60 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: import param_expand_default.tests from hush
Denys Vlasenko [Tue, 25 Jul 2017 13:25:07 +0000 (15:25 +0200)]
ash: import param_expand_default.tests from hush

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: treat ${#?} as "length of $?"
Denys Vlasenko [Tue, 25 Jul 2017 13:18:57 +0000 (15:18 +0200)]
hush: treat ${#?} as "length of $?"

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: add a few tests from hush-vars/*
Denys Vlasenko [Tue, 25 Jul 2017 12:55:05 +0000 (14:55 +0200)]
ash: add a few tests from hush-vars/*

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agovolume_id: enable minix detection
Denys Vlasenko [Tue, 25 Jul 2017 12:22:08 +0000 (14:22 +0200)]
volume_id: enable minix detection

function                                             old     new   delta
volume_id_probe_minix                                  -      87     +87
fs2                                                   64      68      +4
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 1/0 up/down: 91/0)               Total: 91 bytes

Patch by wdlkmpx <wdlkmpx@gmail.com>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: fix comment, no code changes
Denys Vlasenko [Mon, 24 Jul 2017 18:03:24 +0000 (20:03 +0200)]
ash: fix comment, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: copy three tests from hush_test/hush-signals/*
Denys Vlasenko [Mon, 24 Jul 2017 17:42:46 +0000 (19:42 +0200)]
ash: copy three tests from hush_test/hush-signals/*

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoshell: some additions to *sh-misc/* tests
Denys Vlasenko [Mon, 24 Jul 2017 16:51:40 +0000 (18:51 +0200)]
shell: some additions to *sh-misc/* tests

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agotar: postpone creation of symlinks with "suspicious" targets. Closes 8411
Denys Vlasenko [Mon, 24 Jul 2017 15:20:13 +0000 (17:20 +0200)]
tar: postpone creation of symlinks with "suspicious" targets. Closes 8411

function                                             old     new   delta
data_extract_all                                     968    1038     +70
tar_main                                             952     986     +34
scan_tree                                            258     262      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 108/0)             Total: 108 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoudhcpc: downgrade "MAC X:X:X:X:X:X" message to log2 level
Denys Vlasenko [Mon, 24 Jul 2017 11:37:38 +0000 (13:37 +0200)]
udhcpc: downgrade "MAC X:X:X:X:X:X" message to log2 level

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: add most of hush process subst tests
Denys Vlasenko [Mon, 24 Jul 2017 10:49:49 +0000 (12:49 +0200)]
ash: add most of hush process subst tests

ash passes these.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: fix a case when redirect to a closed fd #1 is not restoring (closing) it
Denys Vlasenko [Mon, 24 Jul 2017 10:42:17 +0000 (12:42 +0200)]
hush: fix a case when redirect to a closed fd #1 is not restoring (closing) it

function                                             old     new   delta
setup_redirects                                      200     245     +45
append_squirrel                                        -      41     +41
save_fds_on_redirect                                 256     221     -35
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/1 up/down: 86/-35)             Total: 51 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoudhcpc[6]: downgrade "adapter index N" messages to log2 level
Denys Vlasenko [Mon, 24 Jul 2017 10:06:53 +0000 (12:06 +0200)]
udhcpc[6]: downgrade "adapter index N" messages to log2 level

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoudhcpc[6]: fix messages referring to select() while we use poll()
Denys Vlasenko [Mon, 24 Jul 2017 10:01:28 +0000 (12:01 +0200)]
udhcpc[6]: fix messages referring to select() while we use poll()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: add all hush parsing tests to ast tests
Denys Vlasenko [Mon, 24 Jul 2017 00:49:56 +0000 (02:49 +0200)]
ash: add all hush parsing tests to ast tests

All pass.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: use mempcpy where useful
Denys Vlasenko [Mon, 24 Jul 2017 00:17:05 +0000 (02:17 +0200)]
hush: use mempcpy where useful

function                                             old     new   delta
o_addblock                                            58      42     -16
expand_one_var                                      1618    1555     -63
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-79)             Total: -79 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: fix for last commit
Denys Vlasenko [Sun, 23 Jul 2017 19:55:40 +0000 (21:55 +0200)]
ash: fix for last commit

"mempcpy(q, s, len) + len" is obviously no good :(

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: use mempcpy() in more places
Denys Vlasenko [Sun, 23 Jul 2017 19:46:02 +0000 (21:46 +0200)]
ash: use mempcpy() in more places

Most changes are taken from dash.

function                                             old     new   delta
single_quote                                         127     129      +2
stack_nputstr                                         28      29      +1
path_advance                                         209     202      -7
rmescapes                                            346     308     -38
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/2 up/down: 3/-45)             Total: -42 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agozcip: fix slow environment leak
Denys Vlasenko [Sat, 22 Jul 2017 01:04:20 +0000 (03:04 +0200)]
zcip: fix slow environment leak

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agocrond: do not assume setenv() does not leak
Denys Vlasenko [Sat, 22 Jul 2017 00:25:47 +0000 (02:25 +0200)]
crond: do not assume setenv() does not leak

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agolibbb: avoid malloc/free in bb_unsetenv()
Denys Vlasenko [Sat, 22 Jul 2017 00:15:17 +0000 (02:15 +0200)]
libbb: avoid malloc/free in bb_unsetenv()

function                                             old     new   delta
bb_unsetenv                                           55      83     +28

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agocrond: allow $SHELL and starting user's shell override DEFAULT_SHELL. Closes 6458
Denys Vlasenko [Fri, 21 Jul 2017 23:47:19 +0000 (01:47 +0200)]
crond: allow $SHELL and starting user's shell override DEFAULT_SHELL. Closes 6458

function                                             old     new   delta
crond_main                                          1134    1149     +15
fork_job                                             453     454      +1

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: use mempcpy() where appropriate
Denys Vlasenko [Fri, 21 Jul 2017 16:51:29 +0000 (18:51 +0200)]
ash: use mempcpy() where appropriate

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agobasename: do not use argc
Denys Vlasenko [Fri, 21 Jul 2017 16:41:46 +0000 (18:41 +0200)]
basename: do not use argc

function                                             old     new   delta
basename_main                                        153     148      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agopgrep: fix "pgrep -v -P1"; also allow matching of comm - closes 10086
Denys Vlasenko [Fri, 21 Jul 2017 15:43:14 +0000 (17:43 +0200)]
pgrep: fix "pgrep -v -P1"; also allow matching of comm - closes 10086

function                                             old     new   delta
pgrep_main                                           662     720     +58

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoping: fix help text to show what parameter -p takes
Denys Vlasenko [Fri, 21 Jul 2017 14:07:13 +0000 (16:07 +0200)]
ping: fix help text to show what parameter -p takes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: suppress readonly1.tests false positive; add readonly0.tests
Denys Vlasenko [Fri, 21 Jul 2017 11:37:25 +0000 (13:37 +0200)]
ash: suppress readonly1.tests false positive; add readonly0.tests

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: improve set -x to quote strings as necessary
Denys Vlasenko [Fri, 21 Jul 2017 11:20:14 +0000 (13:20 +0200)]
ash: improve set -x to quote strings as necessary

Basen on the patch from Martijn Dekker <martijn@inlv.org>

function                                             old     new   delta
evalcommand                                         1161    1302    +141
maybe_single_quote                                     -      60     +60
getoptscmd                                           527     546     +19
readtoken1                                          2819    2823      +4
localcmd                                             366     364      -2
evaltreenr                                           495     479     -16
evaltree                                             495     479     -16
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/3 up/down: 224/-34)           Total: 190 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoudhcpc[6]: on log level 1, three messages about raw socket is overkill
Denys Vlasenko [Fri, 21 Jul 2017 10:04:22 +0000 (12:04 +0200)]
udhcpc[6]: on log level 1, three messages about raw socket is overkill

Move first two messages to log2 level:

08:46:32.23824 udhcpc: opening raw socket on ifindex 2
08:46:32.23825 udhcpc: got raw socket fd
08:46:32.26354 udhcpc: created raw socket

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoping: better config help text for FEATURE_FANCY_PING
Denys Vlasenko [Fri, 21 Jul 2017 09:58:43 +0000 (11:58 +0200)]
ping: better config help text for FEATURE_FANCY_PING

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoconfig: deindent all help texts
Denys Vlasenko [Fri, 21 Jul 2017 07:50:55 +0000 (09:50 +0200)]
config: deindent all help texts

Those two spaces after tab have no effect, and always a nuisance when editing.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agolibarchive: FEATURE_LZMA_FAST should be visible if FEATURE_SEAMLESS_LZMA
Denys Vlasenko [Thu, 20 Jul 2017 21:28:00 +0000 (23:28 +0200)]
libarchive: FEATURE_LZMA_FAST should be visible if FEATURE_SEAMLESS_LZMA

While at it, tweak some config help texts.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agounzip: sanitize filename length: malloc(1234mb) is not funny
Denys Vlasenko [Thu, 20 Jul 2017 18:21:50 +0000 (20:21 +0200)]
unzip: sanitize filename length: malloc(1234mb) is not funny

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agounzip: implement -j, closes 9126
Denys Vlasenko [Thu, 20 Jul 2017 18:04:49 +0000 (20:04 +0200)]
unzip: implement -j, closes 9126

function                                             old     new   delta
unzip_main                                          2642    2703     +61
packed_usage                                       31747   31770     +23
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 84/0)               Total: 84 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agounzip: robustify overwrite checks
Denys Vlasenko [Thu, 20 Jul 2017 16:56:05 +0000 (18:56 +0200)]
unzip: robustify overwrite checks

function                                             old     new   delta
get_lstat_mode                                         -      55     +55
unzip_main                                          2667    2642     -25
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 55/-25)             Total: 30 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agounzip: support symlinks. Closes 10031
Denys Vlasenko [Thu, 20 Jul 2017 16:34:51 +0000 (18:34 +0200)]
unzip: support symlinks. Closes 10031

function                                             old     new   delta
unzip_main                                          2519    2667    +148

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agobzcat,zcat: simplify code if gunzip/bunzip2 is not selected
Denys Vlasenko [Thu, 20 Jul 2017 14:25:03 +0000 (16:25 +0200)]
bzcat,zcat: simplify code if gunzip/bunzip2 is not selected

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoshell: optional support for read -t N.NNN, closes 10101
Denys Vlasenko [Thu, 20 Jul 2017 14:09:31 +0000 (16:09 +0200)]
shell: optional support for read -t N.NNN, closes 10101

function                                             old     new   delta
shell_builtin_read                                  1097    1277    +180
dump_procs                                           353     359      +6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agobootchartd: fix typo in comment
Denys Vlasenko [Thu, 20 Jul 2017 11:42:19 +0000 (13:42 +0200)]
bootchartd: fix typo in comment

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agobootchartd: prevent premature stop by device mapper
Uwe Geuder [Wed, 19 Jul 2017 19:08:08 +0000 (22:08 +0300)]
bootchartd: prevent premature stop by device mapper

Kernel thread kdmflush was recognized as display manager kdm,
check for string length.

Signed-off-by: Uwe Geuder <busybox2017-ugeuder@snkmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agosparc: needs -fPIC
Denys Vlasenko [Wed, 19 Jul 2017 15:56:56 +0000 (17:56 +0200)]
sparc: needs -fPIC

Pinted out by Thomas Petazzoni.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoswapon/swapoff: trim config help text
Denys Vlasenko [Wed, 19 Jul 2017 12:39:30 +0000 (14:39 +0200)]
swapon/swapoff: trim config help text

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoUpdate remaining menuconfig items with approximate applet sizes
Denys Vlasenko [Wed, 19 Jul 2017 12:32:54 +0000 (14:32 +0200)]
Update remaining menuconfig items with approximate applet sizes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agood_bloaty: fix floating point output
Ron Yorston [Wed, 19 Jul 2017 09:43:10 +0000 (10:43 +0100)]
od_bloaty: fix floating point output

Currently od_bloaty does this:

   $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | busybox od -f
   od: invalid character 'F' in type string 'fF'
   $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | busybox od -t fD
   od: invalid character 'D' in type string 'fD'
   $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | busybox od -t f
   0000000
   0000010

The first two occur because the alphabetic length specifier isn't being
properly skipped.  The third is due to the empty length specifier being
treated as alphabetic so we fall off the end of the FDL_sizeof array with
undetermined consequences.  Coreutils defaults to printing a double in
this case.

With this patch the output is:

   $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | ./busybox od -f
   0000000   0.0000000e+00   0.0000000e+00
   0000010
   $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | ./busybox od -t fD
   0000000   0.000000000000000e+00
   0000010
   $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | ./busybox od -t f
   0000000   0.000000000000000e+00
   0000010

I guess nobody uses BusyBox od to print floating point numbers.

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohdparm: remove contradicting size info in config help
Denys Vlasenko [Tue, 18 Jul 2017 20:25:58 +0000 (22:25 +0200)]
hdparm: remove contradicting size info in config help

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: remove contradicting size info in config help
Denys Vlasenko [Tue, 18 Jul 2017 20:25:12 +0000 (22:25 +0200)]
ash: remove contradicting size info in config help

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: remove contradicting size info in config help
Denys Vlasenko [Tue, 18 Jul 2017 20:23:55 +0000 (22:23 +0200)]
hush: remove contradicting size info in config help

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoUpdate menuconfig items with approximate applet sizes
Denys Vlasenko [Tue, 18 Jul 2017 20:01:24 +0000 (22:01 +0200)]
Update menuconfig items with approximate applet sizes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoTweaks from mass recompile for 1.27.1 release
Denys Vlasenko [Tue, 18 Jul 2017 18:17:51 +0000 (20:17 +0200)]
Tweaks from mass recompile for 1.27.1 release

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: tweak "help" output
Denys Vlasenko [Tue, 18 Jul 2017 16:14:42 +0000 (18:14 +0200)]
hush: tweak "help" output

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoprintf: fix format string sanity check
Ron Yorston [Tue, 18 Jul 2017 08:33:22 +0000 (09:33 +0100)]
printf: fix format string sanity check

One of the tests for printf checks for an invalid bare '%' in the
format string:

   $ busybox printf '%' a b c
   printf: %: invalid format

On x86_64 a slightly different test doesn't work correctly:

   $ busybox printf '%' d e f
   printf: invalid number 'd'
   printf: invalid number 'e'
   printf: invalid number 'f'

On other platforms the test fails randomly depending on how the
arguments are laid out in memory.

There are two places in the code where strchr is used to determine if
a character in the format string is valid.  However, strchr also returns
a valid pointer if the character being searched for is the null terminator
thus causing the code to incorrectly suppose that a valid character has
been found.

Add explicit checks for the null terminator.

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: fix readonly2.tests failure
Denys Vlasenko [Tue, 18 Jul 2017 13:58:02 +0000 (15:58 +0200)]
hush: fix readonly2.tests failure

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: another testcase for "READONLY_VAR=VAL BLTIN ..."
Denys Vlasenko [Tue, 18 Jul 2017 01:23:07 +0000 (03:23 +0200)]
hush: another testcase for "READONLY_VAR=VAL BLTIN ..."

Currently fails.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: do not assign to readonly VAR in "VAR=VAL CMD" syntax too
Denys Vlasenko [Tue, 18 Jul 2017 00:44:06 +0000 (02:44 +0200)]
hush: do not assign to readonly VAR in "VAR=VAL CMD" syntax too

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: add readonly testcase, fix fallout
Denys Vlasenko [Mon, 17 Jul 2017 23:40:01 +0000 (01:40 +0200)]
hush: add readonly testcase, fix fallout

function                                             old     new   delta
helper_export_local                                  185     214     +29
run_pipe                                            1549    1560     +11
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 40/0)               Total: 40 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: convert exp/ro/local parameters to bitfields in one flag param
Denys Vlasenko [Mon, 17 Jul 2017 23:05:24 +0000 (01:05 +0200)]
hush: convert exp/ro/local parameters to bitfields in one flag param

function                                             old     new   delta
helper_export_local                                  174     185     +11
set_local_var                                        424     420      -4
run_list                                            1048    1044      -4
set_vars_and_save_old                                 88      83      -5
set_local_var_from_halves                             27      22      -5
run_pipe                                            1554    1549      -5
builtin_export                                       173     168      -5
set_pwd_var                                           40      34      -6
builtin_readonly                                      70      64      -6
expand_one_var                                      1625    1618      -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/9 up/down: 11/-47)            Total: -36 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: HUSH_READONLY depends on HUSH
Denys Vlasenko [Mon, 17 Jul 2017 19:47:27 +0000 (21:47 +0200)]
hush: HUSH_READONLY depends on HUSH

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: forgot to emit error on (failing) second "readonly VAR=VAL"
Denys Vlasenko [Mon, 17 Jul 2017 19:31:17 +0000 (21:31 +0200)]
hush: forgot to emit error on (failing) second "readonly VAR=VAL"

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: smaller code in !READONLY configs
Denys Vlasenko [Mon, 17 Jul 2017 19:19:53 +0000 (21:19 +0200)]
hush: smaller code in !READONLY configs

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: implement "readonly" builtin
Denys Vlasenko [Mon, 17 Jul 2017 19:10:50 +0000 (21:10 +0200)]
hush: implement "readonly" builtin

function                                             old     new   delta
builtin_readonly                                       -      70     +70
helper_export_local                                  152     174     +22
bltins1                                              348     360     +12
expand_one_var                                      1620    1625      +5
builtin_export                                       168     173      +5
set_pwd_var                                           36      40      +4
set_local_var                                        410     414      +4
set_vars_and_save_old                                 85      88      +3
set_local_var_from_halves                             24      27      +3
run_pipe                                            1551    1554      +3
run_list                                            1046    1048      +2
builtin_type                                         116     114      -2
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 10/1 up/down: 133/-2)           Total: 131 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: more general format ${var:EXPR:EXPR}
Denys Vlasenko [Mon, 17 Jul 2017 15:49:11 +0000 (17:49 +0200)]
ash: more general format ${var:EXPR:EXPR}

function                                             old     new   delta
subevalvar                                          1171    1202     +31
localcmd                                             364     366      +2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoash: "you disabled math" is wrong: user did not disable it, builder of ash did
Denys Vlasenko [Mon, 17 Jul 2017 15:11:48 +0000 (17:11 +0200)]
ash: "you disabled math" is wrong: user did not disable it, builder of ash did

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: small fix to last commit
Denys Vlasenko [Mon, 17 Jul 2017 14:50:20 +0000 (16:50 +0200)]
hush: small fix to last commit

die_if_script() indeed dies only in scripts! Must handle the case where it continues.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: support ${VAR:N:-M}
Denys Vlasenko [Mon, 17 Jul 2017 14:46:57 +0000 (16:46 +0200)]
hush: support ${VAR:N:-M}

function                                             old     new   delta
expand_one_var                                      1602    1615     +13
builtin_type                                         114     116      +2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoshells: expand TODO comments, no code changes
Denys Vlasenko [Mon, 17 Jul 2017 14:13:35 +0000 (16:13 +0200)]
shells: expand TODO comments, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agottysize: if stdin is not tty, try stdout, then stderr
Denys Vlasenko [Sun, 16 Jul 2017 18:36:48 +0000 (20:36 +0200)]
ttysize: if stdin is not tty, try stdout, then stderr

function                                             old     new   delta
ttysize_main                                         135     175     +40
packed_usage                                       31686   31672     -14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: fix "cmd1 && cmd2 &" handling on NOMMU
Denys Vlasenko [Sun, 16 Jul 2017 18:29:35 +0000 (20:29 +0200)]
hush: fix "cmd1 && cmd2 &" handling on NOMMU

function                                             old     new   delta
done_pipe                                            234     238      +4

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoarch: new applet (same as unmae -m). ~30 bytes.
Denys Vlasenko [Sun, 16 Jul 2017 14:43:41 +0000 (16:43 +0200)]
arch: new applet (same as unmae -m). ~30 bytes.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agoshell: and_or_and_backgrounding.tests is no longer "UNFIXED BUG"
Denys Vlasenko [Sat, 15 Jul 2017 20:54:46 +0000 (22:54 +0200)]
shell: and_or_and_backgrounding.tests is no longer "UNFIXED BUG"

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 years agohush: fix and_or_and_backgrounding.tests failure
Denys Vlasenko [Sat, 15 Jul 2017 20:51:55 +0000 (22:51 +0200)]
hush: fix and_or_and_backgrounding.tests failure

function                                             old     new   delta
done_pipe                                            133     218     +85

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