1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-25 01:34:28 +03:00

strv: introduce strv_new_ap() call

This commit is contained in:
Lennart Poettering 2010-04-10 17:43:12 +02:00
parent dad08730c4
commit 257eca1a9c
2 changed files with 20 additions and 11 deletions

30
strv.c
View File

@ -85,21 +85,20 @@ unsigned strv_length(char **l) {
return n;
}
char **strv_new(const char *x, ...) {
char **strv_new_ap(const char *x, va_list ap) {
const char *s;
char **a;
unsigned n = 0, i = 0;
va_list ap;
va_list aq;
if (x) {
n = 1;
va_start(ap, x);
while (va_arg(ap, const char*))
va_copy(aq, ap);
while (va_arg(aq, const char*))
n++;
va_end(ap);
va_end(aq);
}
if (!(a = new(char*, n+1)))
@ -113,19 +112,16 @@ char **strv_new(const char *x, ...) {
i++;
va_start(ap, x);
while ((s = va_arg(ap, const char*))) {
if (!(a[i] = strdup(s)))
goto fail;
i++;
}
va_end(ap);
}
a[i] = NULL;
return a;
fail:
@ -135,9 +131,21 @@ fail:
free(a[i-1]);
free(a);
return NULL;
}
char **strv_new(const char *x, ...) {
char **r;
va_list ap;
va_start(ap, x);
r = strv_new_ap(x, ap);
va_end(ap);
return r;
}
char **strv_merge(char **a, char **b) {
char **r, **k;

1
strv.h
View File

@ -39,6 +39,7 @@ char **strv_uniq(char **l);
#define strv_contains(l, s) (!!strv_find((l), (s)))
char **strv_new(const char *x, ...) _sentinel;
char **strv_new_ap(const char *x, va_list ap);
static inline bool strv_isempty(char **l) {
return !l || !*l;