From 58052f3717975199f9c1b2aef75894ba2c527f40 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Wed, 31 Aug 2011 12:49:49 -0600 Subject: [PATCH] Fix FIO_OPT_STR_STORE without posval Signed-off-by: Jens Axboe --- parse.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/parse.c b/parse.c index 44581215..efb5e3d0 100644 --- a/parse.c +++ b/parse.c @@ -26,11 +26,14 @@ static int vp_cmp(const void *p1, const void *p2) return strlen(vp2->ival) - strlen(vp1->ival); } -static void posval_sort(struct fio_option *o, struct value_pair *vpmap) +static int posval_sort(struct fio_option *o, struct value_pair *vpmap) { const struct value_pair *vp; int entries; + if (!o->posval[0].ival) + return 0; + memset(vpmap, 0, PARSE_MAX_VP * sizeof(struct value_pair)); for (entries = 0; entries < PARSE_MAX_VP; entries++) { @@ -42,6 +45,7 @@ static void posval_sort(struct fio_option *o, struct value_pair *vpmap) } qsort(vpmap, entries, sizeof(struct value_pair), vp_cmp); + return 1; } static void show_option_range(struct fio_option *o, FILE *out) @@ -487,7 +491,18 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, case FIO_OPT_STR_STORE: { fio_opt_str_fn *fn = o->cb; - posval_sort(o, posval); + if (!posval_sort(o, posval)) { + if (o->roff1) + cp = (char **) o->roff1; + else + cp = td_var(data, o->off1); + *cp = strdup(ptr); + + if (fn) + ret = fn(data, ptr); + + return ret; + } ret = 1; for (i = 0; i < PARSE_MAX_VP; i++) { -- 2.25.1