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>
Jeff King committed
Apr 18, 2012 at 14:10 UTC
d15bbe1379a12e2d9a5f18f7dc96b38afafc6c5d
3 files changed
+17
Documentation/technical/api-argv-array.txt
+5
@@ -37,6 +37,11 @@ Functions
37
`argv_array_push`::
38
Push a copy of a string onto the end of the array.
39
40
+`argv_array_pushl`::
41
+ Push a list of strings onto the end of the array. The arguments
42
+ should be a list of `const char *` strings, terminated by a NULL
43
+ argument.
44
+
45
`argv_array_pushf`::
46
Format a string and push it onto the end of the array. This is a
47
convenience wrapper combining `strbuf_addf` and `argv_array_push`.
argv-array.c
+11
@@ -38,6 +38,17 @@ void argv_array_pushf(struct argv_array *array, const char *fmt, ...)
38
argv_array_push_nodup(array, strbuf_detach(&v, NULL));
39
}
40
41
+void argv_array_pushl(struct argv_array *array, ...)
42
+{
43
+ va_list ap;
44
+ const char *arg;
45
+
46
+ va_start(ap, array);
47
+ while((arg = va_arg(ap, const char *)))
48
+ argv_array_push(array, arg);
49
+ va_end(ap);
50
+}
51
+
52
void argv_array_clear(struct argv_array *array)
53
{
54
if (array->argv != empty_argv) {
argv-array.h
+1
@@ -15,6 +15,7 @@ void argv_array_init(struct argv_array *);
15
void argv_array_push(struct argv_array *, const char *);
16
__attribute__((format (printf,2,3)))
17
void argv_array_pushf(struct argv_array *, const char *fmt, ...);
18
+void argv_array_pushl(struct argv_array *, ...);
19
void argv_array_clear(struct argv_array *);
20
21
#endif /* ARGV_ARRAY_H */