X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=goptions.c;h=33183682d97f7eb3f2ab0887ffe6cea575245e24;hp=a52410b331075430bfd7f95cfceee4c14f4bc69c;hb=7b504eddc4b039f2db3a0626bd08f880c5f4de27;hpb=8f91cc3f7835cdca84944d456e1da77d44a7c354 diff --git a/goptions.c b/goptions.c index a52410b3..33183682 100644 --- a/goptions.c +++ b/goptions.c @@ -885,8 +885,12 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, unsigned long long *ullp = NULL; struct gopt_int *i; - if (o->off1) - ullp = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ullp = td_var(o->prof_opts, o->off1); + else + ullp = td_var(to, o->off1); + } i = container_of(gopt, struct gopt_int, gopt); if (ullp) @@ -898,8 +902,12 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, unsigned int *ip = NULL; struct gopt_combo *c; - if (o->off1) - ip = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(to, o->off1); + } c = container_of(gopt, struct gopt_combo, gopt); if (ip) @@ -908,8 +916,12 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, unsigned int *ip = NULL; struct gopt_int *i; - if (o->off1) - ip = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(to, o->off1); + } i = container_of(gopt, struct gopt_int, gopt); if (ip) @@ -921,8 +933,12 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, unsigned int *ip = NULL; struct gopt_bool *b; - if (o->off1) - ip = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(to, o->off1); + } b = container_of(gopt, struct gopt_bool, gopt); if (ip) @@ -934,8 +950,12 @@ static void gopt_set_option(struct gopt_job_view *gjv, struct fio_option *o, unsigned int *ip = NULL; struct gopt_combo *c; - if (o->off1) - ip = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(to, o->off1); + } c = container_of(gopt, struct gopt_combo, gopt); if (ip) @@ -945,7 +965,12 @@ 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; + + if (o->prof_opts) + p = td_var(o->prof_opts, o->off1); + else + p = td_var(to, o->off1); text = *p; } @@ -961,7 +986,13 @@ 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; + + if (o->prof_opts) + p = td_var(o->prof_opts, o->off1); + else + p = td_var(to, o->off1); + text = *p; } @@ -983,10 +1014,19 @@ 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]; + + if (o->prof_opts) { + ip[0] = td_var(o->prof_opts, o->off1); + ip[1] = td_var(o->prof_opts, o->off2); + ip[2] = td_var(o->prof_opts, o->off3); + ip[3] = td_var(o->prof_opts, o->off4); + } else { + ip[0] = td_var(to, o->off1); + ip[1] = td_var(to, o->off2); + ip[2] = td_var(to, o->off3); + ip[3] = td_var(to, o->off4); + } r = container_of(gopt, struct gopt_range, gopt); gopt_int_range_set_val(r, *ip); @@ -1013,8 +1053,12 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, case FIO_OPT_STR_VAL: { unsigned long long *ullp = NULL; - if (o->off1) - ullp = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ullp = td_var(o->prof_opts, o->off1); + else + ullp = td_var(to, o->off1); + } go = gopt_new_str_val(gjv, o, ullp, opt_index); break; @@ -1022,8 +1066,12 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, case FIO_OPT_STR_VAL_TIME: { unsigned long long *ullp = NULL; - if (o->off1) - ullp = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ullp = td_var(o->prof_opts, o->off1); + else + ullp = td_var(to, o->off1); + } go = gopt_new_ullong(gjv, o, ullp, opt_index); break; @@ -1032,15 +1080,23 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, if (o->posval[0].ival) { unsigned int *ip = NULL; - if (o->off1) - ip = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(to, o->off1); + } go = gopt_new_combo_int(gjv, o, ip, opt_index); } else { unsigned int *ip = NULL; - if (o->off1) - ip = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(to, o->off1); + } go = gopt_new_int(gjv, o, ip, opt_index); } @@ -1049,8 +1105,12 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, case FIO_OPT_BOOL: { unsigned int *ip = NULL; - if (o->off1) - ip = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(to, o->off1); + } go = gopt_new_bool(gjv, o, ip, opt_index); break; @@ -1059,8 +1119,12 @@ static void gopt_add_option(struct gopt_job_view *gjv, GtkWidget *hbox, if (o->posval[0].ival) { unsigned int *ip = NULL; - if (o->off1) - ip = td_var(to, o->off1); + if (o->off1) { + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(to, o->off1); + } go = gopt_new_combo_int(gjv, o, ip, opt_index); } else { @@ -1074,7 +1138,13 @@ 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; + + if (o->prof_opts) + p = td_var(o->prof_opts, o->off1); + else + p = td_var(to, o->off1); + text = *p; } @@ -1090,10 +1160,19 @@ 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]; + + if (o->prof_opts) { + ip[0] = td_var(o->prof_opts, o->off1); + ip[1] = td_var(o->prof_opts, o->off2); + ip[2] = td_var(o->prof_opts, o->off3); + ip[3] = td_var(o->prof_opts, o->off4); + } else { + ip[0] = td_var(to, o->off1); + ip[1] = td_var(to, o->off2); + ip[2] = td_var(to, o->off3); + ip[3] = td_var(to, o->off4); + } go = gopt_new_int_range(gjv, o, ip, opt_index); break; @@ -1203,12 +1282,17 @@ 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); struct value_pair *vp; + unsigned int *ip; gboolean set; guint val = 0; int i; + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(gjv->o, o->off1); + i = 0; vp = &o->posval[0]; while (vp->ival) { @@ -1233,13 +1317,22 @@ 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]; gint val; int i; + if (o->prof_opts) { + ip[0] = td_var(o->prof_opts, o->off1); + ip[1] = td_var(o->prof_opts, o->off2); + ip[2] = td_var(o->prof_opts, o->off3); + ip[3] = td_var(o->prof_opts, o->off4); + } else { + ip[0] = td_var(gjv->o, o->off1); + ip[1] = td_var(gjv->o, o->off2); + ip[2] = td_var(gjv->o, o->off3); + ip[3] = td_var(gjv->o, o->off4); + } + for (i = 0; i < GOPT_RANGE_SPIN; i++) { val = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(r->spins[i])); *ip[i] = val; @@ -1250,10 +1343,15 @@ 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; GtkAdjustment *adj; gint index; + if (o->prof_opts) + ullp = td_var(o->prof_opts, o->off1); + else + ullp = td_var(gjv->o, o->off1); + if (!ullp) return; @@ -1274,7 +1372,12 @@ 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; + + if (o->prof_opts) + p = td_var(o->prof_opts, o->off1); + else + p = td_var(gjv->o, o->off1); if (*p) free(*p); @@ -1285,9 +1388,14 @@ 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; gboolean set; + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(gjv->o, o->off1); + set = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b->check)); *ip = set; } @@ -1295,10 +1403,15 @@ 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); GtkAdjustment *adj; + unsigned int *ip; guint val; + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(gjv->o, o->off1); + adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(i->spin)); val = gtk_adjustment_get_value(adj); *ip = val; @@ -1308,7 +1421,12 @@ 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; + + if (o->prof_opts) + p = td_var(o->prof_opts, o->off1); + else + p = td_var(gjv->o, o->off1); if (*p) free(*p); @@ -1320,9 +1438,14 @@ 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; gint index; + if (o->prof_opts) + ip = td_var(o->prof_opts, o->off1); + else + ip = td_var(gjv->o, o->off1); + index = gtk_combo_box_get_active(GTK_COMBO_BOX(c->combo)); *ip = o->posval[index].oval; } @@ -1390,8 +1513,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; } }