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>
This commit is contained in:
14
shell/ash_test/ash-getopts/getopt_nested.right
Normal file
14
shell/ash_test/ash-getopts/getopt_nested.right
Normal file
@@ -0,0 +1,14 @@
|
||||
var:a
|
||||
var:b
|
||||
var:c
|
||||
var:a
|
||||
var:b
|
||||
var:c
|
||||
Illegal option -d
|
||||
var:?
|
||||
Illegal option -e
|
||||
var:?
|
||||
Illegal option -f
|
||||
var:?
|
||||
var:a
|
||||
End: var:? OPTIND:6
|
21
shell/ash_test/ash-getopts/getopt_nested.tests
Executable file
21
shell/ash_test/ash-getopts/getopt_nested.tests
Executable file
@@ -0,0 +1,21 @@
|
||||
# Test that there is no interference of getopt()
|
||||
# in getopts and unset.
|
||||
# It's unclear what "correct" OPTIND values should be
|
||||
# for "b" and "c" results from "-bc": 2? 3?
|
||||
# What we focus on here is that all options are reported
|
||||
# correct number of times and in correct sequence.
|
||||
|
||||
(
|
||||
|
||||
loop=99
|
||||
while getopts "abc" var -a -bc -abc -def -a; do
|
||||
echo "var:$var" #OPTIND:$OPTIND
|
||||
# this may use getopt():
|
||||
unset -ff func
|
||||
test $((--loop)) = 0 && break # BUG if this triggers
|
||||
done
|
||||
echo "End: var:$var OPTIND:$OPTIND"
|
||||
|
||||
) 2>&1 \
|
||||
| sed -e 's/ unrecognized option: / invalid option -- /' \
|
||||
-e 's/ illegal option -- / invalid option -- /' \
|
Reference in New Issue
Block a user