Browse Source

quote: add "sq_dequote_to_argv" to put unwrapped args in an argv array

This new function unwraps the space separated shell quoted elements in
its first argument and places them in the argv array passed as its second
argument.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Christian Couder 16 years ago committed by Junio C Hamano
parent
commit
eaa759b914
  1. 17
      quote.c
  2. 1
      quote.h

17
quote.c

@ -120,6 +120,23 @@ char *sq_dequote(char *arg) @@ -120,6 +120,23 @@ char *sq_dequote(char *arg)
return sq_dequote_step(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_step(next, &next);
if (!dequoted)
return -1;
ALLOC_GROW(*argv, *nr + 1, *alloc);
(*argv)[(*nr)++] = dequoted;
} while (next);

return 0;
}

/* 1 means: quote as octal
* 0 means: quote as octal if (quote_path_fully)
* -1 means: never quote

1
quote.h

@ -46,6 +46,7 @@ extern char *sq_dequote(char *); @@ -46,6 +46,7 @@ extern char *sq_dequote(char *);
* is no more argument to be dequoted, "next" is updated to point to NULL.
*/
extern char *sq_dequote_step(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);

Loading…
Cancel
Save