1 /*-*- Mode: C; c-basic-offset: 8 -*-*/
11 char *strv_find(char **l, const char *name) {
22 void strv_free(char **l) {
34 char **strv_copy(char **l) {
37 if (!(r = new(char*, strv_length(l)+1)))
40 for (k = r; *l; k++, l++)
41 if (!(*k = strdup(*l)))
48 for (k--, l--; k >= r; k--, l--)
54 unsigned strv_length(char **l) {
66 char **strv_new(const char *x, ...) {
69 unsigned n = 0, i = 0;
77 while (va_arg(ap, const char*))
83 if (!(a = new(char*, n+1)))
87 if (!(a[i] = strdup(x))) {
96 while ((s = va_arg(ap, const char*))) {
97 if (!(a[i] = strdup(s)))
119 char **strv_merge(char **a, char **b) {
128 if (!(r = new(char*, strv_length(a)+strv_length(b)+1)))
131 for (k = r; *a; k++, a++)
132 if (!(*k = strdup(*a)))
135 if (!(*k = strdup(*b)))
142 for (k--; k >= r; k--)
149 bool strv_contains(char **l, const char *s) {