git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/3] argv-array: add a new "pushl" method

From
Jeff King <peff@peff.net>
Date
Apr 18, 2012, 21:10 UTC
Message-ID
<20120418211005.GB21301@sigill.intra.peff.net>
In-Reply-To
<20120418210740.GA21214@sigill.intra.peff.net>

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>
---
I called this "pushl" after "execl", with the intent that we might
eventually have "pushv" if somebody wants it. Hopefully that makes
sense to others, but if not, I can name it something more verbose.
 Documentation/technical/api-argv-array.txt |    5 +++++
 argv-array.c                               |   11 +++++++++++
 argv-array.h                               |    1 +
 3 files changed, 17 insertions(+)
diff --git a/Documentation/technical/api-argv-array.txt b/Documentation/technical/api-argv-array.txt
index 49b3d52..1b7d8f1 100644
--- a/Documentation/technical/api-argv-array.txt
+++ b/Documentation/technical/api-argv-array.txt
@@ -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`.
diff --git a/argv-array.c b/argv-array.c
index 110a61b..0b5f889 100644
--- a/argv-array.c
+++ b/argv-array.c
@@ -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) {
diff --git a/argv-array.h b/argv-array.h
index c45c698..b93a69c 100644
--- a/argv-array.h
+++ b/argv-array.h
@@ -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 */
-- 
1.7.9.6.8.g992e5
Previous: Jeff KingNext: Jeff King
Message 7 of 8 in “gc: fix off-by-one in append_option”
  1. gc: fix off-by-one in append_optionJeff King, Apr 17, 2012
  2. Jeff KingApr 18, 2012
  3. Junio C HamanoApr 18, 2012
  4. Jeff KingApr 18, 2012
  5. Jeff KingApr 18, 2012
  6. 1/3 argv-array: refactor empty_argv initializationJeff King, Apr 18, 2012
  7. 2/3 argv-array: add a new "pushl" methodJeff King, Apr 18, 2012
  8. 3/3 gc: use argv-array for sub-commandsJeff King, Apr 18, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.