Re: [PATCH 2/4] quote: add "sq_dequote_to_argv" to put unwrapped args in an argv array
- From
Christian Couder <chriscool@tuxfamily.org>
- Date
- Mar 31, 2009, 05:09 UTC
- Message-ID
- <200903310709.39034.chriscool@tuxfamily.org>
- In-Reply-To
- <7vhc1bjyl7.fsf@gitster.siamese.dyndns.org>
Le lundi 30 mars 2009, Junio C Hamano a écrit :
Show 40 quoted lines
> Christian Couder <chriscool@tuxfamily.org> writes:
> > 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@tuxfamily.org>
> > ---
> > 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;
>
> Usually we signal an error with a negative value, e.g. -1.
>
> > + ALLOC_GROW(*argv, *nr + 1, *alloc);
> > + (*argv)[(*nr)++] = xstrdup(dequoted);
>
> The original sq_dequote() interface takes advantage of the fact that the
> result of single-quote unquoting is always shorter than the original and
> it can rewrite the argument in-place to return the result. I would
> expect dequote_step() to retain that trait and allow the caller to use
> its return value without xstrdup().I thought that it could be dangerous not to use xstrdup, as users of this function might want to free the strings in argv one by one. But I don't care much.
Thanks, Christian.