Make string-set options behave more like bool options
Before this change, string-set options (like time_based) would not
complain if passed an argument, they would just always evaluate
to being set. This is very confusing if someone uses them negated,
ala:
time_based=0
since fio would interpret that as the option being set. Now we'll
do the right thing, time_based=0 will be identical to not having
the option set. And time_based=1 or just time_based will equate
to the option being set.
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
diff --git a/parse.c b/parse.c
index ef23fbe..ad2782f 100644
--- a/parse.c
+++ b/parse.c
@@ -498,10 +498,17 @@
break;
}
- case FIO_OPT_BOOL: {
+ case FIO_OPT_BOOL:
+ case FIO_OPT_STR_SET: {
fio_opt_int_fn *fn = o->cb;
- ret = check_int(ptr, &il);
+ if (ptr)
+ ret = check_int(ptr, &il);
+ else if (o->type == FIO_OPT_BOOL)
+ ret = 1;
+ else
+ il = 1;
+
if (ret)
break;
@@ -537,27 +544,6 @@
}
break;
}
- case FIO_OPT_STR_SET: {
- fio_opt_str_set_fn *fn = o->cb;
-
- if (fn)
- ret = fn(data);
- else {
- if (first) {
- if (o->roff1)
- *(unsigned int *) o->roff1 = 1;
- else
- val_store(ilp, 1, o->off1, 0, data);
- }
- if (!more) {
- if (o->roff2)
- *(unsigned int *) o->roff2 = 1;
- else if (o->off2)
- val_store(ilp, 1, o->off2, 0, data);
- }
- }
- break;
- }
case FIO_OPT_DEPRECATED:
fprintf(stdout, "Option %s is deprecated\n", o->name);
break;