X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=goptions.c;h=08b17ac931ae2395ecc38c00a070fd9701505cdd;hp=28df6930e0abd74c929c186847c8ba2d1cb5c83a;hb=621677626f2551bedfdc4a5fc3b3e5f8492b94fa;hpb=28db256b569af54e1bb162fc0b5d5b5d9526be98 diff --git a/goptions.c b/goptions.c index 28df6930..08b17ac9 100644 --- a/goptions.c +++ b/goptions.c @@ -523,7 +523,7 @@ static struct gopt_int *__gopt_new_int(struct gopt_job_view *gjv, else if (o->def) { long long val; - check_str_bytes(o->def, &val, NULL); + check_str_bytes(o->def, &val, o); defval = val; } @@ -730,7 +730,7 @@ static struct gopt *gopt_new_int_range(struct gopt_job_view *gjv, if (o->def) { long long val; - check_str_bytes(o->def, &val, NULL); + check_str_bytes(o->def, &val, o); for (i = 0; i < GOPT_RANGE_SPIN; i++) defvals[i] = val; } @@ -893,18 +893,29 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, gopt_int_set_val(i, *ullp); break; } - case FIO_OPT_INT: { - unsigned int *ip = NULL; - struct gopt_int *i; + case FIO_OPT_INT: + if (o->posval[0].ival) { + unsigned int *ip = NULL; + struct gopt_combo *c; - if (o->off1) - ip = td_var(to, o->off1); + if (o->off1) + ip = td_var(to, o->off1); - i = container_of(gopt, struct gopt_int, gopt); - if (ip) - gopt_int_set_val(i, *ip); - break; + c = container_of(gopt, struct gopt_combo, gopt); + if (ip) + gopt_combo_int_set_val(c, *ip); + } else { + unsigned int *ip = NULL; + struct gopt_int *i; + + if (o->off1) + ip = td_var(to, o->off1); + + i = container_of(gopt, struct gopt_int, gopt); + if (ip) + gopt_int_set_val(i, *ip); } + break; case FIO_OPT_STR_SET: case FIO_OPT_BOOL: { unsigned int *ip = NULL; @@ -1017,15 +1028,23 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, go = gopt_new_ullong(gjv, o, ullp, opt_index); break; } - case FIO_OPT_INT: { - unsigned int *ip = NULL; + case FIO_OPT_INT: + if (o->posval[0].ival) { + unsigned int *ip = NULL; - if (o->off1) - ip = td_var(to, o->off1); + if (o->off1) + ip = td_var(to, o->off1); - go = gopt_new_int(gjv, o, ip, opt_index); - break; + go = gopt_new_combo_int(gjv, o, ip, opt_index); + } else { + unsigned int *ip = NULL; + + if (o->off1) + ip = td_var(to, o->off1); + + go = gopt_new_int(gjv, o, ip, opt_index); } + break; case FIO_OPT_STR_SET: case FIO_OPT_BOOL: { unsigned int *ip = NULL; @@ -1371,8 +1390,8 @@ static void gopt_handle_changed(struct gopt *gopt) break; } default: - log_err("gfio: bad option type %s/%d\n", gopt->opt_type); - return; + log_err("gfio: bad option type: %d\n", gopt->opt_type); + break; } }