/** * For an option opt, recreate the command-line option, appending it to * opt->value which must be a argv_array. This is useful when we need to pass * the command-line option, which can be specified multiple times, to another * command. */ int parse_opt_passthru_argv(const struct option *opt, const char *arg, int unset) { static struct strbuf sb = STRBUF_INIT; struct argv_array *opt_value = opt->value; if (recreate_opt(&sb, opt, arg, unset) < 0) return -1; argv_array_push(opt_value, sb.buf); return 0; }
/** * For an option opt, recreates the command-line option in opt->value which * must be an char* initialized to NULL. This is useful when we need to pass * the command-line option to another command. Since any previous value will be * overwritten, this callback should only be used for options where the last * one wins. */ int parse_opt_passthru(const struct option *opt, const char *arg, int unset) { static struct strbuf sb = STRBUF_INIT; char **opt_value = opt->value; if (recreate_opt(&sb, opt, arg, unset) < 0) return -1; free(*opt_value); *opt_value = strbuf_detach(&sb, NULL); return 0; }