X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=goptions.c;h=c01b6cc7d8f835bd3113a8601dc0404aaff50911;hp=b78accdaf3a141a7258680994cfe4f0b73f608a0;hb=f6cbf8ac4f70c800bbbfc23c5dcf44ed619c0acc;hpb=29df29eaf88958c8741103d2056a4773d4959d9d diff --git a/goptions.c b/goptions.c index b78accda..c01b6cc7 100644 --- a/goptions.c +++ b/goptions.c @@ -874,7 +874,7 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, struct gopt_str_val *g; if (o->off1) - ullp = td_var(to, o->off1); + ullp = td_var(to, o, o->off1); g = container_of(gopt, struct gopt_str_val, gopt); if (ullp) @@ -886,32 +886,43 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, struct gopt_int *i; if (o->off1) - ullp = td_var(to, o->off1); + ullp = td_var(to, o, o->off1); i = container_of(gopt, struct gopt_int, gopt); if (ullp) 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, 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, 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; struct gopt_bool *b; if (o->off1) - ip = td_var(to, o->off1); + ip = td_var(to, o, o->off1); b = container_of(gopt, struct gopt_bool, gopt); if (ip) @@ -924,7 +935,7 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, struct gopt_combo *c; if (o->off1) - ip = td_var(to, o->off1); + ip = td_var(to, o, o->off1); c = container_of(gopt, struct gopt_combo, gopt); if (ip) @@ -934,7 +945,7 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, char *text = NULL; if (o->off1) { - char **p = td_var(to, o->off1); + char **p = td_var(to, o, o->off1); text = *p; } @@ -950,7 +961,7 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, char *text = NULL; if (o->off1) { - char **p = td_var(to, o->off1); + char **p = td_var(to, o, o->off1); text = *p; } @@ -972,10 +983,10 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, break; case FIO_OPT_RANGE: { struct gopt_range *r; - unsigned int *ip[4] = { td_var(to, o->off1), - td_var(to, o->off2), - td_var(to, o->off3), - td_var(to, o->off4) }; + unsigned int *ip[4] = { td_var(to, o, o->off1), + td_var(to, o, o->off2), + td_var(to, o, o->off3), + td_var(to, o, o->off4) }; r = container_of(gopt, struct gopt_range, gopt); gopt_int_range_set_val(r, *ip); @@ -1003,7 +1014,7 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, unsigned long long *ullp = NULL; if (o->off1) - ullp = td_var(to, o->off1); + ullp = td_var(to, o, o->off1); go = gopt_new_str_val(gjv, o, ullp, opt_index); break; @@ -1012,26 +1023,34 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, unsigned long long *ullp = NULL; if (o->off1) - ullp = td_var(to, o->off1); + ullp = td_var(to, o, o->off1); 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, 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, 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; if (o->off1) - ip = td_var(to, o->off1); + ip = td_var(to, o, o->off1); go = gopt_new_bool(gjv, o, ip, opt_index); break; @@ -1041,7 +1060,7 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, unsigned int *ip = NULL; if (o->off1) - ip = td_var(to, o->off1); + ip = td_var(to, o, o->off1); go = gopt_new_combo_int(gjv, o, ip, opt_index); } else { @@ -1055,7 +1074,7 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, char *text = NULL; if (o->off1) { - char **p = td_var(to, o->off1); + char **p = td_var(to, o, o->off1); text = *p; } @@ -1071,10 +1090,10 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, go = gopt_new_str_multi(gjv, o, opt_index); break; case FIO_OPT_RANGE: { - unsigned int *ip[4] = { td_var(to, o->off1), - td_var(to, o->off2), - td_var(to, o->off3), - td_var(to, o->off4) }; + unsigned int *ip[4] = { td_var(to, o, o->off1), + td_var(to, o, o->off2), + td_var(to, o, o->off3), + td_var(to, o, o->off4) }; go = gopt_new_int_range(gjv, o, ip, opt_index); break; @@ -1184,7 +1203,7 @@ static void gopt_handle_str_multi_changed(struct gopt_job_view *gjv, struct gopt_str_multi *m, struct fio_option *o) { - unsigned int *ip = td_var(gjv->o, o->off1); + unsigned int *ip = td_var(gjv->o, o, o->off1); struct value_pair *vp; gboolean set; guint val = 0; @@ -1197,7 +1216,7 @@ static void gopt_handle_str_multi_changed(struct gopt_job_view *gjv, break; set = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m->checks[i])); if (set) { - if (vp->or) + if (vp->orval) val |= vp->oval; else val = vp->oval; @@ -1214,10 +1233,10 @@ static void gopt_handle_range_changed(struct gopt_job_view *gjv, struct gopt_range *r, struct fio_option *o) { - unsigned int *ip[4] = { td_var(gjv->o, o->off1), - td_var(gjv->o, o->off2), - td_var(gjv->o, o->off3), - td_var(gjv->o, o->off4) }; + unsigned int *ip[4] = { td_var(gjv->o, o, o->off1), + td_var(gjv->o, o, o->off2), + td_var(gjv->o, o, o->off3), + td_var(gjv->o, o, o->off4) }; gint val; int i; @@ -1231,7 +1250,7 @@ static void gopt_handle_str_val_changed(struct gopt_job_view *gjv, struct gopt_str_val *s, struct fio_option *o) { - unsigned long long *ullp = td_var(gjv->o, o->off1); + unsigned long long *ullp = td_var(gjv->o, o, o->off1); GtkAdjustment *adj; gint index; @@ -1255,7 +1274,7 @@ static void gopt_handle_str_val_changed(struct gopt_job_view *gjv, static void gopt_handle_str_changed(struct gopt_job_view *gjv, struct gopt_str *s, struct fio_option *o) { - char **p = td_var(gjv->o, o->off1); + char **p = td_var(gjv->o, o, o->off1); if (*p) free(*p); @@ -1266,7 +1285,7 @@ static void gopt_handle_str_changed(struct gopt_job_view *gjv, static void gopt_handle_bool_changed(struct gopt_job_view *gjv, struct gopt_bool *b, struct fio_option *o) { - unsigned int *ip = td_var(gjv->o, o->off1); + unsigned int *ip = td_var(gjv->o, o, o->off1); gboolean set; set = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b->check)); @@ -1276,7 +1295,7 @@ static void gopt_handle_bool_changed(struct gopt_job_view *gjv, static void gopt_handle_int_changed(struct gopt_job_view *gjv, struct gopt_int *i, struct fio_option *o) { - unsigned int *ip = td_var(gjv->o, o->off1); + unsigned int *ip = td_var(gjv->o, o, o->off1); GtkAdjustment *adj; guint val; @@ -1289,7 +1308,7 @@ static void gopt_handle_combo_str_changed(struct gopt_job_view *gjv, struct gopt_combo *c, struct fio_option *o) { - char **p = td_var(gjv->o, o->off1); + char **p = td_var(gjv->o, o, o->off1); if (*p) free(*p); @@ -1301,7 +1320,7 @@ static void gopt_handle_combo_int_changed(struct gopt_job_view *gjv, struct gopt_combo *c, struct fio_option *o) { - unsigned int *ip = td_var(gjv->o, o->off1); + unsigned int *ip = td_var(gjv->o, o, o->off1); gint index; index = gtk_combo_box_get_active(GTK_COMBO_BOX(c->combo)); @@ -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; } } @@ -1414,7 +1433,7 @@ static int gopt_handle_changed_options(struct gopt_job_view *gjv) goto done; while (!flist_empty(&gjv->changed_list)) { - gopt = flist_entry(gjv->changed_list.next, struct gopt, changed_list); + gopt = flist_first_entry(&gjv->changed_list, struct gopt, changed_list); flist_del_init(&gopt->changed_list); } @@ -1558,7 +1577,7 @@ void gopt_get_options_window(GtkWidget *window, struct gfio_client *gc) gjv = calloc(1, sizeof(*gjv)); INIT_FLIST_HEAD(&gjv->changed_list); - gco = flist_entry(gc->o_list.next, struct gfio_client_options, list); + gco = flist_first_entry(&gc->o_list, struct gfio_client_options, list); gjv->o = &gco->o; gjv->dialog = dialog; gjv->client = gc;