X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fenv-util.c;h=0f1ac9294bd1c61a12eaeb99cb075b55d28e7d88;hp=7a213a77c0ea8ea9261045c65e6f015960a20040;hb=641906e9366891e0ad3e6e38b7396a427678c4cf;hpb=4d1a69043862ed979642f5688097160355d4cc81 diff --git a/src/shared/env-util.c b/src/shared/env-util.c index 7a213a77c..0f1ac9294 100644 --- a/src/shared/env-util.c +++ b/src/shared/env-util.c @@ -128,7 +128,22 @@ bool strv_env_is_valid(char **e) { /* Check if there are duplicate assginments */ k = strcspn(*p, "="); STRV_FOREACH(q, p + 1) - if (strncmp(*p, *q, k) == 0 && (*q)[k] == '=') + if (strneq(*p, *q, k) && (*q)[k] == '=') + return false; + } + + return true; +} + +bool strv_env_name_or_assignment_is_valid(char **l) { + char **p, **q; + + STRV_FOREACH(p, l) { + if (!env_assignment_is_valid(*p) && !env_name_is_valid(*p)) + return false; + + STRV_FOREACH(q, p + 1) + if (streq(*p, *q)) return false; } @@ -156,7 +171,7 @@ static int env_append(char **r, char ***k, char **a) { n++; for (j = r; j < *k; j++) - if (strncmp(*j, *a, n) == 0) + if (strneq(*j, *a, n)) break; if (j >= *k) @@ -232,7 +247,7 @@ static bool env_match(const char *t, const char *pattern) { if (!strchr(pattern, '=')) { size_t l = strlen(pattern); - return strncmp(t, pattern, l) == 0 && t[l] == '='; + return strneq(t, pattern, l) && t[l] == '='; } return false; @@ -348,7 +363,7 @@ char *strv_env_get_n(char **l, const char *name, size_t k) { return NULL; STRV_FOREACH(i, l) - if (strncmp(*i, name, k) == 0 && + if (strneq(*i, name, k) && (*i)[k] == '=') return *i + k + 1; @@ -376,7 +391,7 @@ char **strv_env_clean(char **e) { n = strcspn(*p, "="); STRV_FOREACH(q, p + 1) - if (strncmp(*p, *q, n) == 0 && (*q)[n] == '=') { + if (strneq(*p, *q, n) && (*q)[n] == '=') { duplicate = true; break; }