Improve parsing of boolean command line options.
Accept true/1 as synonyms for 'on', and 'false'/0 as synonyms for 'off'. Also reject other values instead of silently converting them to 'off'.
This commit is contained in:
@ -144,11 +144,19 @@ option_t *set_option(const char *name, const char *value, sb_arg_type_t type)
|
||||
|
||||
if (type != SB_ARG_TYPE_BOOL && (value == NULL || value[0] == '\0'))
|
||||
return opt;
|
||||
|
||||
|
||||
switch (type) {
|
||||
case SB_ARG_TYPE_BOOL:
|
||||
if (value == NULL || !strcmp(value, "on"))
|
||||
if (value == NULL || !strcmp(value, "on") ||
|
||||
!strcmp(value, "true") || !strcmp(value, "1"))
|
||||
{
|
||||
add_value(&opt->values, "on");
|
||||
}
|
||||
else if (strcmp(value, "off") && strcmp(value, "false") &&
|
||||
strcmp(value, "0"))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
case SB_ARG_TYPE_INT:
|
||||
case SB_ARG_TYPE_SIZE:
|
||||
|
||||
@ -488,3 +488,36 @@ Command line options tests
|
||||
cmdline_module loaded
|
||||
FATAL: */cmdline_module.lua:5: test error (glob)
|
||||
[1]
|
||||
|
||||
##########################################################################
|
||||
# Test boolean option validation
|
||||
##########################################################################
|
||||
$ cat > cmdline.lua <<EOF
|
||||
> sysbench.cmdline.options = {
|
||||
> bool_opt = {"Flag", false}
|
||||
> }
|
||||
>
|
||||
> function prepare()
|
||||
> print("bool_opt = " .. tostring(sysbench.opt.bool_opt))
|
||||
> end
|
||||
> EOF
|
||||
|
||||
$ SB_ARGS=--verbosity=0
|
||||
$ sysbench $SB_ARGS cmdline.lua --bool-opt=on prepare
|
||||
bool_opt = true
|
||||
$ sysbench $SB_ARGS cmdline.lua --bool-opt=off prepare
|
||||
bool_opt = false
|
||||
$ sysbench $SB_ARGS cmdline.lua --bool-opt=true prepare
|
||||
bool_opt = true
|
||||
$ sysbench $SB_ARGS cmdline.lua --bool-opt=false prepare
|
||||
bool_opt = false
|
||||
$ sysbench $SB_ARGS cmdline.lua --bool-opt=1 prepare
|
||||
bool_opt = true
|
||||
$ sysbench $SB_ARGS cmdline.lua --bool-opt=0 prepare
|
||||
bool_opt = false
|
||||
$ sysbench $SB_ARGS cmdline.lua --bool-opt=5 prepare
|
||||
invalid option: --bool-opt=5
|
||||
[1]
|
||||
$ sysbench $SB_ARGS cmdline.lua --bool-opt=foo prepare
|
||||
invalid option: --bool-opt=foo
|
||||
[1]
|
||||
|
||||
Reference in New Issue
Block a user