On Mon, Apr 16, 2018 at 11:38 PM, QI Fuli <[email protected]> wrote: > This patch adds OPT_STRING_LIST to parse_option in order to support > multiple space seperated string objects in one option. > > Signed-off-by: QI Fuli <[email protected]> > --- > ccan/list/list.h | 6 ++++++ > util/parse-options.c | 25 +++++++++++++++++++++++++ > util/parse-options.h | 3 +++ > 3 files changed, 34 insertions(+) > > diff --git a/ccan/list/list.h b/ccan/list/list.h > index 4d1d34e..f6c927f 100644 > --- a/ccan/list/list.h > +++ b/ccan/list/list.h > @@ -26,6 +26,12 @@ struct list_node > struct list_node *next, *prev; > }; > > +struct string_list_node > +{ > + char *str; > + struct list_node list; > +}; > + > /** > * struct list_head - the head of a doubly-linked list > * @h: the list_head (containing next and prev pointers) > diff --git a/util/parse-options.c b/util/parse-options.c > index 751c091..cac18f0 100644 > --- a/util/parse-options.c > +++ b/util/parse-options.c > @@ -20,6 +20,7 @@ > #include <util/util.h> > #include <util/strbuf.h> > #include <util/parse-options.h> > +#include <ccan/list/list.h> > > #define OPT_SHORT 1 > #define OPT_UNSET 2 > @@ -695,3 +696,27 @@ int parse_opt_verbosity_cb(const struct option *opt, > } > return 0; > } > + > +int parse_opt_string_list(const struct option *opt, const char *arg, int > unset) > +{ > + if (unset) > + return 0; > + > + if (!arg) > + return -1; > + > + struct list_head *v = opt->value; > + char *temp = strdup(arg); > + const char *deli = " "; > + > + temp = strtok(temp, deli); > + while (temp != NULL) { > + struct string_list_node *sln = malloc(sizeof(*sln)); > + sln->str = temp; > + list_add_tail(v, &sln->list); > + temp = strtok(NULL, deli); > + } > + > + free(temp); > + return 0; > +}
As far as I can see we do not need to allocate a list or add this new OPT_STRING_LIST argument type. Just teach the util_<object>_filter() routines that the 'ident' argument may be a space delimited list. See the attached patch: _______________________________________________ Linux-nvdimm mailing list [email protected] https://lists.01.org/mailman/listinfo/linux-nvdimm
