X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=parse.c;h=bb16bc166af3696030ba0bef436487364901b29b;hp=0ef00b81cda60ffb6209a0c3b305b370aeee8810;hb=883e4841d5466955ad464ee3a6b37e009cfa80ef;hpb=078b46d19bdebe58e4caf02a857440cf760fad6d diff --git a/parse.c b/parse.c index 0ef00b81..bb16bc16 100644 --- a/parse.c +++ b/parse.c @@ -15,6 +15,7 @@ #include "parse.h" #include "debug.h" #include "options.h" +#include "optgroup.h" #include "minmax.h" #include "lib/ieee754.h" #include "lib/pow2.h" @@ -905,6 +906,25 @@ static int handle_option(struct fio_option *o, const char *__ptr, void *data) return ret; } +struct fio_option *find_option(struct fio_option *options, const char *opt) +{ + struct fio_option *o; + + for (o = &options[0]; o->name; o++) { + if (!o_match(o, opt)) + continue; + if (o->type == FIO_OPT_UNSUPPORTED) { + log_err("Option <%s>: %s\n", o->name, o->help); + continue; + } + + return o; + } + + return NULL; +} + + static struct fio_option *get_option(char *opt, struct fio_option *options, char **post) { @@ -960,8 +980,27 @@ void sort_options(char **opts, struct fio_option *options, int num_opts) __fio_options = NULL; } +static void add_to_dump_list(struct fio_option *o, struct flist_head *dump_list, + const char *post) +{ + struct print_option *p; + + if (!dump_list) + return; + + p = malloc(sizeof(*p)); + p->name = strdup(o->name); + if (post) + p->value = strdup(post); + else + p->value = NULL; + + flist_add_tail(&p->list, dump_list); +} + int parse_cmd_option(const char *opt, const char *val, - struct fio_option *options, void *data) + struct fio_option *options, void *data, + struct flist_head *dump_list) { struct fio_option *o; @@ -971,11 +1010,13 @@ int parse_cmd_option(const char *opt, const char *val, return 1; } - if (!handle_option(o, val, data)) - return 0; + if (handle_option(o, val, data)) { + log_err("fio: failed parsing %s=%s\n", opt, val); + return 1; + } - log_err("fio: failed parsing %s=%s\n", opt, val); - return 1; + add_to_dump_list(o, dump_list, val); + return 0; } int parse_option(char *opt, const char *input, @@ -1006,18 +1047,7 @@ int parse_option(char *opt, const char *input, return 1; } - if (dump_list) { - struct print_option *p = malloc(sizeof(*p)); - - p->name = strdup((*o)->name); - if (post) - p->value = strdup(post); - else - p->value = NULL; - - flist_add_tail(&p->list, dump_list); - } - + add_to_dump_list(*o, dump_list, post); return 0; } @@ -1221,8 +1251,10 @@ void fill_default_options(void *data, struct fio_option *options) void option_init(struct fio_option *o) { - if (o->type == FIO_OPT_DEPRECATED) + if (o->type == FIO_OPT_DEPRECATED || o->type == FIO_OPT_UNSUPPORTED) return; + if (o->name && !o->lname) + log_err("Option %s: missing long option name\n", o->name); if (o->type == FIO_OPT_BOOL) { o->minval = 0; o->maxval = 1;