1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-11 22:56:14 +02:00

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>
This commit is contained in:
Jeff King 2012-09-01 07:25:27 -04:00 committed by Junio C Hamano
parent 9e234af281
commit fe4a0a2888
3 changed files with 14 additions and 0 deletions

View File

@ -46,6 +46,10 @@ Functions
Format a string and push it onto the end of the array. This is a Format a string and push it onto the end of the array. This is a
convenience wrapper combining `strbuf_addf` and `argv_array_push`. convenience wrapper combining `strbuf_addf` and `argv_array_push`.
`argv_array_pop`::
Remove the final element from the array. If there are no
elements in the array, do nothing.
`argv_array_clear`:: `argv_array_clear`::
Free all memory associated with the array and return it to the Free all memory associated with the array and return it to the
initial, empty state. initial, empty state.

View File

@ -49,6 +49,15 @@ void argv_array_pushl(struct argv_array *array, ...)
va_end(ap); va_end(ap);
} }
void argv_array_pop(struct argv_array *array)
{
if (!array->argc)
return;
free((char *)array->argv[array->argc - 1]);
array->argv[array->argc - 1] = NULL;
array->argc--;
}
void argv_array_clear(struct argv_array *array) void argv_array_clear(struct argv_array *array)
{ {
if (array->argv != empty_argv) { if (array->argv != empty_argv) {

View File

@ -16,6 +16,7 @@ void argv_array_push(struct argv_array *, const char *);
__attribute__((format (printf,2,3))) __attribute__((format (printf,2,3)))
void argv_array_pushf(struct argv_array *, const char *fmt, ...); void argv_array_pushf(struct argv_array *, const char *fmt, ...);
void argv_array_pushl(struct argv_array *, ...); void argv_array_pushl(struct argv_array *, ...);
void argv_array_pop(struct argv_array *);
void argv_array_clear(struct argv_array *); void argv_array_clear(struct argv_array *);
#endif /* ARGV_ARRAY_H */ #endif /* ARGV_ARRAY_H */