argv_array: offer to split a string by whitespace

This is a simple function that will interpret a string as a whitespace
delimited list of values, and add those values into the array.

Note: this function does not (yet) offer to split by arbitrary delimiters,
or keep empty values in case of runs of whitespace, or de-quote Unix shell
style. All fo this functionality can be added later, when and if needed.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Johannes Schindelin 2018-04-25 11:53:57 +02:00 committed by Junio C Hamano
parent 1f1cddd558
commit c5aa6db64f
2 changed files with 22 additions and 0 deletions

View File

@ -64,6 +64,26 @@ void argv_array_pop(struct argv_array *array)
array->argc--;
}

void argv_array_split(struct argv_array *array, const char *to_split)
{
while (isspace(*to_split))
to_split++;
for (;;) {
const char *p = to_split;

if (!*p)
break;

while (*p && !isspace(*p))
p++;
argv_array_push_nodup(array, xstrndup(to_split, p - to_split));

while (isspace(*p))
p++;
to_split = p;
}
}

void argv_array_clear(struct argv_array *array)
{
if (array->argv != empty_argv) {

View File

@ -19,6 +19,8 @@ LAST_ARG_MUST_BE_NULL
void argv_array_pushl(struct argv_array *, ...);
void argv_array_pushv(struct argv_array *, const char **);
void argv_array_pop(struct argv_array *);
/* Splits by whitespace; does not handle quoted arguments! */
void argv_array_split(struct argv_array *, const char *);
void argv_array_clear(struct argv_array *);
const char **argv_array_detach(struct argv_array *);