Commit fe4a0a28 authored by Jeff King's avatar Jeff King Committed by Junio C Hamano

argv-array: add pop function

Sometimes we build a set of similar command lines, differing
only in the final arguments (e.g., "fetch --multiple"). To
use argv_array for this, you have to either push the same
set of elements repeatedly, or break the abstraction by
manually manipulating the array's internal members.

Instead, let's provide a sanctioned "pop" function to remove
elements from the end.
Signed-off-by: 's avatarJeff King <>
Signed-off-by: 's avatarJunio C Hamano <>
parent 9e234af2
......@@ -46,6 +46,10 @@ Functions
Format a string and push it onto the end of the array. This is a
convenience wrapper combining `strbuf_addf` and `argv_array_push`.
Remove the final element from the array. If there are no
elements in the array, do nothing.
Free all memory associated with the array and return it to the
initial, empty state.
......@@ -49,6 +49,15 @@ void argv_array_pushl(struct argv_array *array, ...)
void argv_array_pop(struct argv_array *array)
if (!array->argc)
free((char *)array->argv[array->argc - 1]);
array->argv[array->argc - 1] = NULL;
void argv_array_clear(struct argv_array *array)
if (array->argv != empty_argv) {
......@@ -16,6 +16,7 @@ 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_pop(struct argv_array *);
void argv_array_clear(struct argv_array *);
#endif /* ARGV_ARRAY_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment