X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fstrv.c;h=0afd9865d9c7316fd35d155d6388182d64065091;hb=5d6ab905c00342d012aed559a859b373512e4650;hp=c5f8df06da6e8325b36dbbe0dec5b5dc54910fe4;hpb=da19d5c19f60ec80e1733b1e994311c59c6eda73;p=elogind.git diff --git a/src/strv.c b/src/strv.c index c5f8df06d..0afd9865d 100644 --- a/src/strv.c +++ b/src/strv.c @@ -70,9 +70,10 @@ char **strv_copy(char **l) { if (!(r = new(char*, strv_length(l)+1))) return NULL; - for (k = r; *l; k++, l++) - if (!(*k = strdup(*l))) - goto fail; + if (l) + for (k = r; *l; k++, l++) + if (!(*k = strdup(*l))) + goto fail; *k = NULL; return r; @@ -357,7 +358,10 @@ char **strv_remove(char **l, const char *s) { if (!l) return NULL; - /* Drops every occurrence of s in the string list */ + assert(s); + + /* Drops every occurrence of s in the string list, edits + * in-place. */ for (f = t = l; *f; f++) { @@ -386,7 +390,12 @@ static int env_append(char **r, char ***k, char **a) { for (; *a; a++) { char **j; - size_t n = strcspn(*a, "=") + 1; + size_t n; + + n = strcspn(*a, "="); + + if ((*a)[n] == '=') + n++; for (j = r; j < *k; j++) if (strncmp(*j, *a, n) == 0)