Browse Source

argv-array: add a new "pushl" method

It can be convenient to push many strings in a single line
(e.g., if you are initializing an array with defaults). This
patch provides a convenience wrapper to allow this.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff King 13 years ago committed by Junio C Hamano
parent
commit
d15bbe1379
  1. 5
      Documentation/technical/api-argv-array.txt
  2. 11
      argv-array.c
  3. 1
      argv-array.h

5
Documentation/technical/api-argv-array.txt

@ -37,6 +37,11 @@ Functions @@ -37,6 +37,11 @@ Functions
`argv_array_push`::
Push a copy of a string onto the end of the array.

`argv_array_pushl`::
Push a list of strings onto the end of the array. The arguments
should be a list of `const char *` strings, terminated by a NULL
argument.

`argv_array_pushf`::
Format a string and push it onto the end of the array. This is a
convenience wrapper combining `strbuf_addf` and `argv_array_push`.

11
argv-array.c

@ -38,6 +38,17 @@ void argv_array_pushf(struct argv_array *array, const char *fmt, ...) @@ -38,6 +38,17 @@ void argv_array_pushf(struct argv_array *array, const char *fmt, ...)
argv_array_push_nodup(array, strbuf_detach(&v, NULL));
}

void argv_array_pushl(struct argv_array *array, ...)
{
va_list ap;
const char *arg;

va_start(ap, array);
while((arg = va_arg(ap, const char *)))
argv_array_push(array, arg);
va_end(ap);
}

void argv_array_clear(struct argv_array *array)
{
if (array->argv != empty_argv) {

1
argv-array.h

@ -15,6 +15,7 @@ void argv_array_init(struct argv_array *); @@ -15,6 +15,7 @@ void argv_array_init(struct argv_array *);
void argv_array_push(struct argv_array *, const char *);
__attribute__((format (printf,2,3)))
void argv_array_pushf(struct argv_array *, const char *fmt, ...);
void argv_array_pushl(struct argv_array *, ...);
void argv_array_clear(struct argv_array *);

#endif /* ARGV_ARRAY_H */

Loading…
Cancel
Save