diff options
Diffstat (limited to 'argv-array.c')
-rw-r--r-- | argv-array.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/argv-array.c b/argv-array.c index 9e960d549c..5d370fa336 100644 --- a/argv-array.c +++ b/argv-array.c @@ -49,6 +49,12 @@ void argv_array_pushl(struct argv_array *array, ...) va_end(ap); } +void argv_array_pushv(struct argv_array *array, const char **argv) +{ + for (; *argv; argv++) + argv_array_push(array, *argv); +} + void argv_array_pop(struct argv_array *array) { if (!array->argc) @@ -69,22 +75,13 @@ void argv_array_clear(struct argv_array *array) argv_array_init(array); } -const char **argv_array_detach(struct argv_array *array, int *argc) +const char **argv_array_detach(struct argv_array *array) { - const char **argv = - array->argv == empty_argv || array->argc == 0 ? NULL : array->argv; - if (argc) - *argc = array->argc; - argv_array_init(array); - return argv; -} - -void argv_array_free_detached(const char **argv) -{ - if (argv) { - int i; - for (i = 0; argv[i]; i++) - free((char **)argv[i]); - free(argv); + if (array->argv == empty_argv) + return xcalloc(1, sizeof(const char *)); + else { + const char **ret = array->argv; + argv_array_init(array); + return ret; } } |