X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fenv-util.c;h=6a52fb960d0e8df25791b66e6375263b8bc7c353;hb=b32ff512191bf873266ee8067f6f6c8a30c96a5e;hp=9a833d22e4d176208088e73ff9aeba2d10e4c18e;hpb=123b964a537c21e9ebaf849acefb23f0f13db785;p=elogind.git diff --git a/src/shared/env-util.c b/src/shared/env-util.c index 9a833d22e..6a52fb960 100644 --- a/src/shared/env-util.c +++ b/src/shared/env-util.c @@ -108,7 +108,7 @@ bool env_assignment_is_valid(const char *e) { /* POSIX says the overall size of the environment block cannot * be > ARG_MAX, hence the individual variable assignments - * cannot be either, but let's room for one trailing NUL + * cannot be either, but let's leave room for one trailing NUL * byte. */ if (strlen(e) > ARG_MAX - 1) return false; @@ -128,7 +128,7 @@ 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; } @@ -171,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) @@ -227,7 +227,7 @@ fail: return NULL; } -static bool env_match(const char *t, const char *pattern) { +_pure_ static bool env_match(const char *t, const char *pattern) { assert(t); assert(pattern); @@ -247,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; @@ -363,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 +376,7 @@ char *strv_env_get(char **l, const char *name) { return strv_env_get_n(l, name, strlen(name)); } -char **strv_env_clean(char **e) { +char **strv_env_clean_log(char **e, const char *message) { char **p, **q; int k = 0; @@ -385,13 +385,15 @@ char **strv_env_clean(char **e) { bool duplicate = false; if (!env_assignment_is_valid(*p)) { + if (message) + log_error("Ignoring invalid environment '%s': %s", *p, message); free(*p); continue; } 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; } @@ -407,3 +409,7 @@ char **strv_env_clean(char **e) { e[k] = NULL; return e; } + +char **strv_env_clean(char **e) { + return strv_env_clean_log(e, NULL); +}