This new function unwraps the space separated shell quoted elements in its first argument and put a copy of them in the argv array passed as its second argument. Signed-off-by: Christian Couder <chriscool@xxxxxxxxxxxxx> --- quote.c | 17 +++++++++++++++++ quote.h | 2 ++ 2 files changed, 19 insertions(+), 0 deletions(-) diff --git a/quote.c b/quote.c index 8cf0ef4..5b12a4a 100644 --- a/quote.c +++ b/quote.c @@ -120,6 +120,23 @@ char *sq_dequote(char *arg) return sq_dequote_many(arg, NULL); } +int sq_dequote_to_argv(char *arg, const char ***argv, int *nr, int *alloc) +{ + char *next = arg; + + if (!*arg) + return 0; + do { + char *dequoted = sq_dequote_many(next, &next); + if (!dequoted) + return 1; + ALLOC_GROW(*argv, *nr + 1, *alloc); + (*argv)[(*nr)++] = xstrdup(dequoted); + } while (next); + + return 0; +} + /* 1 means: quote as octal * 0 means: quote as octal if (quote_path_fully) * -1 means: never quote diff --git a/quote.h b/quote.h index c2f98e7..bbd0f09 100644 --- a/quote.h +++ b/quote.h @@ -47,6 +47,8 @@ extern char *sq_dequote(char *); */ extern char *sq_dequote_many(char *arg, char **next); +extern int sq_dequote_to_argv(char *arg, const char ***argv, int *nr, int *alloc); + extern int unquote_c_style(struct strbuf *, const char *quoted, const char **endp); extern size_t quote_c_style(const char *name, struct strbuf *, FILE *, int no_dq); extern void quote_two_c_style(struct strbuf *, const char *, const char *, int); -- 1.6.2.1.404.gb0085.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html