Emily Shaffer <emilyshaffer@xxxxxxxxxx> writes: > parse-options already knows how to read into a string_list, and it knows > how to read into an argv_array as a passthrough (that is, including the > argument as well as its value). string_list and argv_array serve similar > purposes but are somewhat painful to convert between; so, let's teach > parse-options to read values of string arguments directly into an > argv_array without preserving the argument name. > > This is useful if collecting generic arguments to pass through to > another command, for example, 'git hook run --arg "--quiet" --arg > "--format=pretty" some-hook'. The resulting argv_array would contain > { "--quiet", "--format=pretty" }. > > The implementation is based on that of OPT_STRING_LIST. Be it argv_array or strvec, I think this is a useful thing to do. I grepped for the users of OPT_STRING_LIST() to see if some of them are better served by this, but none of them stood out as candidates that are particularly good match. > +int parse_opt_argv_array(const struct option *opt, const char *arg, int unset) > +{ > + struct argv_array *v = opt->value; > + > + if (unset) { > + argv_array_clear(v); > + return 0; > + } > + > + if (!arg) > + return -1; I think the calling parse_options() loop would catch this negative return and raise an error, but is it better for this code to stay silent or would it be better to say that opt->long_name/short_name is not a boolean? > + argv_array_push(v, arg); > + return 0; > +}