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:
parent
9e234af281
commit
fe4a0a2888
|
@ -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.
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in New Issue