X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=parse.c;h=1b38db5c2d789d9cbce07658b325aa066f616e37;hp=7dc5fcc869ff05b21accb95257bb4fa473d188f3;hb=3980127d55c6b1773274bc854aae4589aa3f785a;hpb=903dc3f6f7a44b17f09152a4fd9a2e2d767cc2cc diff --git a/parse.c b/parse.c index 7dc5fcc8..1b38db5c 100644 --- a/parse.c +++ b/parse.c @@ -46,7 +46,10 @@ static void show_option_range(struct fio_option *o) if (!o->minval && !o->maxval) return; - printf("%20s: min=%d, max=%d\n", "range", o->minval, o->maxval); + printf("%20s: min=%d", "range", o->minval); + if (o->maxval) + printf(", max=%d", o->maxval); + printf("\n"); } static void show_option_values(struct fio_option *o) @@ -278,8 +281,7 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, case FIO_OPT_STR_VAL_TIME: is_time = 1; case FIO_OPT_INT: - case FIO_OPT_STR_VAL: - case FIO_OPT_STR_VAL_INT: { + case FIO_OPT_STR_VAL: { fio_opt_str_val_fn *fn = o->cb; if (is_time) @@ -304,8 +306,7 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, if (fn) ret = fn(data, &ull); else { - if (o->type == FIO_OPT_STR_VAL_INT || - o->type == FIO_OPT_INT) { + if (o->type == FIO_OPT_INT) { if (first) val_store(ilp, ull, o->off1, data); if (!more && o->off2) @@ -430,12 +431,16 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, return ret; } -static int handle_option(struct fio_option *o, const char *ptr, void *data) +static int handle_option(struct fio_option *o, const char *__ptr, void *data) { - const char *ptr2 = NULL; + char *ptr, *ptr2 = NULL; int r1, r2; - dprint(FD_PARSE, "handle_option=%s, ptr=%s\n", o->name, ptr); + dprint(FD_PARSE, "handle_option=%s, ptr=%s\n", o->name, __ptr); + + ptr = NULL; + if (__ptr) + ptr = strdup(__ptr); /* * See if we have a second set of parameters, hidden after a comma. @@ -446,6 +451,8 @@ static int handle_option(struct fio_option *o, const char *ptr, void *data) (o->type != FIO_OPT_STR_STORE) && (o->type != FIO_OPT_STR)) { ptr2 = strchr(ptr, ','); + if (ptr2 && *(ptr2 + 1) == '\0') + *ptr2 = '\0'; if (!ptr2) ptr2 = strchr(ptr, ':'); if (!ptr2) @@ -459,12 +466,17 @@ static int handle_option(struct fio_option *o, const char *ptr, void *data) */ r1 = __handle_option(o, ptr, data, 1, !!ptr2); - if (!ptr2) + if (!ptr2) { + if (ptr) + free(ptr); return r1; + } ptr2++; r2 = __handle_option(o, ptr2, data, 0, 0); + if (ptr) + free(ptr); return r1 && r2; } @@ -655,7 +667,6 @@ static void show_option_help(struct fio_option *o) const char *typehelp[] = { "string (opt=bla)", "string with possible k/m/g postfix (opt=4k)", - "string with range and postfix (opt=1k-4k)", "string with time postfix (opt=10s)", "string (opt=bla)", "string with dual range (opt=1k-4k,4k-8k)",