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: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Sep 1, 2012 at 07:25 UTC
fe4a0a288842e225f99254b3e6ce14ff98875501
3 files changed
+14
Documentation/technical/api-argv-array.txt
+4
@@ -46,6 +46,10 @@ Functions
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`.
48
49
+`argv_array_pop`::
50
+ Remove the final element from the array. If there are no
51
+ elements in the array, do nothing.
52
+
53
`argv_array_clear`::
54
Free all memory associated with the array and return it to the
55
initial, empty state.
argv-array.c
+9
@@ -49,6 +49,15 @@ void argv_array_pushl(struct argv_array *array, ...)
49
va_end(ap);
50
}
51
52
+void argv_array_pop(struct argv_array *array)
53
+{
54
+ if (!array->argc)
55
+ return;
56
+ free((char *)array->argv[array->argc - 1]);
57
+ array->argv[array->argc - 1] = NULL;
58
+ array->argc--;
59
+}
60
+
61
void argv_array_clear(struct argv_array *array)
62
{
63
if (array->argv != empty_argv) {
argv-array.h
+1
@@ -16,6 +16,7 @@ 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_pop(struct argv_array *);
20
void argv_array_clear(struct argv_array *);
21
22
#endif /* ARGV_ARRAY_H */