X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fstrv.c;h=a5ce7e9593652f9f095b1801454fd061caf69034;hb=7b870f607bcb8f445d4d29a776d12d9de3bf1487;hp=7bcfabbf1a39d9901c74a830d372bbb505a8e13e;hpb=a740c14c59907f370a6b3a3ba5a86fada88cb07e;p=elogind.git diff --git a/src/shared/strv.c b/src/shared/strv.c index 7bcfabbf1..a5ce7e959 100644 --- a/src/shared/strv.c +++ b/src/shared/strv.c @@ -64,7 +64,7 @@ void strv_free(char **l) { free(l); } -char **strv_copy(char **l) { +char **strv_copy(char * const *l) { char **r, **k; k = r = new(char*, strv_length(l) + 1); @@ -84,7 +84,7 @@ char **strv_copy(char **l) { return r; } -unsigned strv_length(char **l) { +unsigned strv_length(char * const *l) { unsigned n = 0; if (!l) @@ -387,32 +387,43 @@ fail: return NULL; } -int strv_extend(char ***l, const char *value) { +int strv_push(char ***l, char *value) { char **c; - char *v; unsigned n; if (!value) return 0; - v = strdup(value); - if (!v) - return -ENOMEM; - n = strv_length(*l); c = realloc(*l, sizeof(char*) * (n + 2)); - if (!c) { - free(v); + if (!c) return -ENOMEM; - } - c[n] = v; + c[n] = value; c[n+1] = NULL; *l = c; return 0; } +int strv_extend(char ***l, const char *value) { + char *v; + int r; + + if (!value) + return 0; + + v = strdup(value); + if (!v) + return -ENOMEM; + + r = strv_push(l, v); + if (r < 0) + free(v); + + return r; +} + char **strv_uniq(char **l) { char **i;