X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fstrv.c;h=7bcfabbf1a39d9901c74a830d372bbb505a8e13e;hp=ee0b71ece048bf3a4aa59823ccd654912d38038b;hb=a740c14c59907f370a6b3a3ba5a86fada88cb07e;hpb=4d1a69043862ed979642f5688097160355d4cc81 diff --git a/src/shared/strv.c b/src/shared/strv.c index ee0b71ece..7bcfabbf1 100644 --- a/src/shared/strv.c +++ b/src/shared/strv.c @@ -64,14 +64,6 @@ void strv_free(char **l) { free(l); } -void strv_freep(char ***l) { - if (!l) - return; - - strv_free(*l); - *l = NULL; -} - char **strv_copy(char **l) { char **r, **k; @@ -305,6 +297,31 @@ char **strv_split_quoted(const char *s) { return r; } +char **strv_split_newlines(const char *s) { + char **l; + unsigned n; + + assert(s); + + /* Special version of strv_split() that splits on newlines and + * suppresses an empty string at the end */ + + l = strv_split(s, NEWLINE); + if (!l) + return NULL; + + n = strv_length(l); + if (n <= 0) + return l; + + if (isempty(l[n-1])) { + free(l[n-1]); + l[n-1] = NULL; + } + + return l; +} + char *strv_join(char **l, const char *separator) { char *r, *e; char **s; @@ -504,6 +521,22 @@ char **strv_parse_nulstr(const char *s, size_t l) { return v; } +char **strv_split_nulstr(const char *s) { + const char *i; + char **r = NULL; + + NULSTR_FOREACH(i, s) + if (strv_extend(&r, i) < 0) { + strv_free(r); + return NULL; + } + + if (!r) + return strv_new(NULL, NULL); + + return r; +} + bool strv_overlap(char **a, char **b) { char **i, **j;