/* 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;
/* 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;
}
n++;
for (j = r; j < *k; j++)
- if (strncmp(*j, *a, n) == 0)
+ if (strneq(*j, *a, n))
break;
if (j >= *k)
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;
return NULL;
STRV_FOREACH(i, l)
- if (strncmp(*i, name, k) == 0 &&
+ if (strneq(*i, name, k) &&
(*i)[k] == '=')
return *i + k + 1;
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;
}