9c8e94bc0a
ash: fail if 'shift' operand is out of range
...
If the numeric argument passed to ash's 'shift' built-in is greater than
'$#' the command performs no operation and exits successfully. It should
return a non-zero exit code instead:
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#shift
This is consistent with bash and hush.
function old new delta
shiftcmd 122 120 -2
Signed-off-by: Ingo van Lil <inguin@gmx.de >
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2018-01-07 14:22:38 +01:00
82d1c1f84a
randomconfig fixes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-12-31 17:30:02 +01:00
a5060b8364
ash: fix nofork bug where environment is not properly passed to a command
...
function old new delta
listvars 144 252 +108
evalcommand 1500 1546 +46
showvars 142 147 +5
shellexec 242 245 +3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/0 up/down: 162/0) Total: 162 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-11-03 14:16:25 +01:00
9c143ce52d
ash: retain envvars with bad names in initial environment. Closes 10231
...
Reworks "ash: [VAR] Sanitise environment variable names on entry"
commit.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-11-02 12:56:24 +01:00
25f3b737dc
hush: fix comment parsing in cmd
, closes 10421
...
function old new delta
parse_stream 2692 2690 -2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-10-22 15:55:48 +02:00
14c85eb7db
whitespace fixes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-10-12 19:40:47 +02:00
3c183a8758
typo fix
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-10-12 19:35:42 +02:00
a2e32b324e
ash: survive failures in $PS1 expansion. Closes 10371
...
function old new delta
expandstr 120 209 +89
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-10-12 19:20:13 +02:00
6f97b30a90
use %m printf specifier where appropriate
...
function old new delta
out 85 75 -10
udhcpd_main 1472 1461 -11
open_stdio_to_tty 98 85 -13
init_exec 245 232 -13
udhcpc_main 2763 2749 -14
do_cmd 4771 4755 -16
status_line_bold_errno 32 14 -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/7 up/down: 0/-95) Total: -95 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-09-29 18:17:25 +02:00
0c4dbd481a
regularize format of source file headers, no code changes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-09-18 16:28:43 +02:00
9fed83a7cc
hush: fix false positive in unset.tests
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-29 14:35:58 +02:00
6016181b68
hush: GETOPT_RESET() _after_ getopts too.
...
NOEXEC'ed applets which use getopt() need this.
function old new delta
builtin_getopts 403 413 +10
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-29 14:32:17 +02:00
55af51c66d
hush: reuse "OPTIND=..." string
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-29 13:48:49 +02:00
238ff98bb8
hush: fix "getopts" builtin to not be upset by other builtins calling getopt()
...
function old new delta
builtin_getopts 363 403 +40
unset_local_var_len 185 215 +30
set_local_var 440 466 +26
reset_traps_to_defaults 151 157 +6
pseudo_exec_argv 320 326 +6
install_special_sighandlers 52 58 +6
pick_sighandler 62 65 +3
execvp_or_die 85 88 +3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 8/0 up/down: 120/0) Total: 120 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-29 13:38:30 +02:00
12ffefb549
ash: more s/error/perror/ for better error reporting
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-23 14:52:56 +02:00
687aac056d
ash: when cd fails, say why
...
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de >
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-23 14:48:25 +02:00
20a63b2c18
ash: report reason when a script file could not be opened
...
It is always nicer to give the user some sort of indication why an
operation failed.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de >
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-23 14:47:45 +02:00
fec2b1f79d
ash: stage backported LINENO support as a separate patch
...
Looks biggish and not particularly useful, but may be easier to just eat
the impact if future backports from dash would be otherwise increasingly
difficult.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-17 16:43:33 +02:00
048491fbdc
hush: trivial code shrink in builtin_getopts
...
function old new delta
builtin_getopts 368 363 -5
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-17 12:36:39 +02:00
9832bbaba9
ash: unset OPTARG if getopts exits 1, support OPTERR=0 behavior
...
function old new delta
getoptscmd 522 547 +25
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-15 15:44:41 +02:00
4476c70301
ash,hush: comment and debug tweaks, no code changes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-15 15:27:41 +02:00
0485b677d2
ash: one "current line = 1" might be missing, fix that
...
I'm not sure this is necessary, but dash has this init here.
Just in case, do it too.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-14 19:46:56 +02:00
c2aea025bb
ash: update testsuite (we now error out on ${#=})
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-14 15:01:32 +02:00
452cc1d9bd
ash: [PARSER] Catch variable length expansions on non-existant specials
...
Upstream commit:
Date: Thu, 30 Oct 2014 11:53:35 +0800
[PARSER] Catch variable length expansions on non-existant specials
Currently we only check special variable names that follow directly
after $ or ${. So errors such as ${#&} are not caught. This patch
fixes that by moving the is_special check to just before we print out
the special variable name.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au >
function old new delta
readtoken1 2630 2635 +5
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-14 14:23:45 +02:00
007ce9f807
shell: tweak getopts tests, no code changes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-13 02:59:00 +02:00
419db0391e
hush: implement "silent" optstrings of ":opts"
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-11 17:21:14 +02:00
129e1ce72c
hush: add a test which fails due to uclibc bug in getopt()
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-11 17:00:39 +02:00
d16e612c93
hush: fix redirect code (was using uninitialized variables)
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-11 15:41:39 +02:00
9a7d0a0191
shell: add OPTARG poisoning to getopt_optarg.tests
...
ash fails this!
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-11 02:37:48 +02:00
81f962f3df
hush: teach getopts to set/unset OPTARG
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-11 02:05:21 +02:00
74d4058928
hush: getopts builtin
...
function old new delta
builtin_getopts - 271 +271
bltins1 372 384 +12
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/0 up/down: 283/0) Total: 283 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-11 01:32:46 +02:00
4628945cd8
ash: fix "unset OPTIND" throwing an error message
...
Added test was failing quite severely. Now only one subtest fails
(OPTERR=0 has no effect).
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-11 00:59:36 +02:00
11f2e99c13
hush: optional times builtin
...
function old new delta
builtin_times - 108 +108
bltins1 360 372 +12
static.times_tbl - 9 +9
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 1/0 up/down: 129/0) Total: 129 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-10 16:34:03 +02:00
cde46f75cb
shell: more efficient check for EOL in read
...
function old new delta
shell_builtin_read 1334 1320 -14
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-09 14:04:07 +02:00
1f41c885fc
hush: implement -d DELIM option for 'read'
...
The POSIX standard only requires the 'read' builtin to handle '-r':
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html
However, Bash introduced the option '-d <DELIM>' to override IFS for
just one invocation, and it is quite useful.
We already support this in ash, let's add it to hush, too.
function old new delta
builtin_read 263 284 +21
.rodata 163587 163589 +2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 23/0) Total: 23 bytes
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de >
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-09 13:52:36 +02:00
3bef5d89b0
ash: implement -d DELIM option for read
...
The POSIX standard only requires the read builtin to handle -r:
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html
However, Bash introduced the option -d <DELIM> to override IFS for
just one invocation, and it is quite useful.
It is also super easy to implement in BusyBox' ash, so let's do that.
The motivation: This option is used by Git's test suite.
function old new delta
.rodata 163505 163587 +82
shell_builtin_read 1244 1289 +45
readcmd 233 259 +26
builtin_read 258 263 +5
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/0 up/down: 158/0) Total: 158 bytes
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de >
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-09 13:52:17 +02:00
80e8e3cc05
noexec: consolidate code
...
function old new delta
run_noexec_applet_and_exit - 61 +61
find_applet_by_name 128 124 -4
run_applet_no_and_exit 441 434 -7
tryexec 169 152 -17
pseudo_exec_argv 338 321 -17
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/6 up/down: 61/-48) Total: 13 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-07 19:24:57 +02:00
c9c1ccc4ed
noexec: do GETOPT_RESET() before entering APPLET_main()
...
hush -c 'yes | head -1' was not happy.
function old new delta
tryexec 159 169 +10
pseudo_exec_argv 328 338 +10
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-07 18:59:35 +02:00
f2cf1cc716
noexec: set comm field for noexecs
...
function old new delta
set_task_comm - 18 +18
tryexec 152 159 +7
pseudo_exec_argv 321 328 +7
main 106 97 -9
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/2 up/down: 34/-13) Total: 23 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-07 18:45:33 +02:00
248a67fb75
free,stat: make NOEXEC
...
pkill/pgrep/pidof uncovered another quirk: what about noexec's _process names_?
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-07 18:18:09 +02:00
0f14f41e72
ash: do not set a signal to SIG_DFL if it already is
...
function old new delta
setsignal 312 338 +26
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-06 20:06:19 +02:00
5c527dc57e
make 17 state-changing execing applets (ex: "nice PROG ARGS") noexec
...
The applets with "<applet> [opts] PROG ARGS" API very quickly exec
another program, noexec is okay for them:
chpst/envdir/envuidgid/softlimit/setuidgid
chroot
chrt
ionice
nice
nohup
setarch/linux32/linux64
taskset
cttyhack
"reset" and "sulogin" applets don't have this form, but also exec
another program at once, thus made noexec too.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-04 19:55:01 +02:00
f8cdc7a2bc
ash: BASH_XTRACEFD bashism
...
Based on patch by Johannes Schindelin <johannes.schindelin@gmx.de >
function old new delta
evalcommand 1447 1500 +53
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-04 15:24:49 +02:00
7344755823
ash: remove no-longer-used variable
...
As of 035486c75
(ash: significant overhaul of redirect saving logic,
2017-07-31), the sv_pos variable is no longer used (just assigned to,
with no further effect).
Let's just remove it.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de >
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-04 14:52:08 +02:00
d329e34c96
ash: INT_OFF/INT_ON around run_nofork_applet()
...
function old new delta
evalcommand 1441 1447 +6
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-04 14:50:03 +02:00
49e6bf2db9
sheel: improve comments on signal handling
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-04 14:28:16 +02:00
cfd392bea9
ash: add a fixme comment at run_nofork_applet
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-03 19:56:29 +02:00
19c9f31af1
nofork: fix a bug uncovered by hush testsuite (forgotten fflush)
...
function old new delta
run_nofork_applet 280 287 +7
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-03 19:52:47 +02:00
39701204cf
hush: do not accept "if() { echo; }" function def
...
function old new delta
parse_stream 2634 2692 +58
msg_and_die_if_script - 21 +21
syntax_error_unexpected_ch 41 46 +5
syntax_error_at 14 18 +4
die_if_script 31 28 -3
setup_redirects 319 308 -11
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/2 up/down: 88/-14) Total: 74 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-02 19:46:14 +02:00
84ea60ed65
line editing: make read_line_input() not take timeout param
...
It's almost always -1.
function old new delta
read_line_input 3902 3912 +10
new_line_input_t 24 31 +7
pgetc 583 585 +2
save_command_ps_at_cur_history 80 78 -2
read_line 76 74 -2
fgetc_interactive 246 244 -2
addLines 84 82 -2
doCommands 2226 2222 -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/5 up/down: 19/-12) Total: 7 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com >
2017-08-02 17:27:28 +02:00