X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=parse.c;h=5043374405d8a1e262687a5a1bdcac90f18990cf;hb=3d87c7a89fe27e2c593ab690a56911375aff99b5;hp=a8f42e1d6185159b9ad5c076a3a82d207e9a1b06;hpb=f7fa2653589f9ecf0d3d106286f17620bcf32de0;p=fio.git diff --git a/parse.c b/parse.c index a8f42e1d..50433744 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,7 +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) { + if (o->type == FIO_OPT_INT) { if (first) val_store(ilp, ull, o->off1, data); if (!more && o->off2) @@ -426,15 +428,25 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data, ret = 1; } + if (ret) + return ret; + + if (o->verify) + ret = o->verify(o, 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. @@ -445,6 +457,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) @@ -458,12 +472,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; } @@ -654,7 +673,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)",