return strv_env_replace_consume(l, p);
}
+int _strv_env_assign_many(char ***l, ...) {
+ va_list ap;
+ int r;
+
+ assert(l);
+
+ va_start(ap, l);
+ for (;;) {
+ const char *key, *value;
+
+ key = va_arg(ap, const char *);
+ if (!key)
+ break;
+
+ if (!env_name_is_valid(key)) {
+ va_end(ap);
+ return -EINVAL;
+ }
+
+ value = va_arg(ap, const char *);
+ if (!value) {
+ strv_env_unset(*l, key);
+ continue;
+ }
+
+ char *p = strjoin(key, "=", value);
+ if (!p) {
+ va_end(ap);
+ return -ENOMEM;
+ }
+
+ r = strv_env_replace_consume(l, p);
+ if (r < 0) {
+ va_end(ap);
+ return r;
+ }
+ }
+ va_end(ap);
+
+ return 0;
+}
+
char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) {
assert(name);
int strv_env_replace_strdup(char ***l, const char *assignment);
int strv_env_replace_strdup_passthrough(char ***l, const char *assignment);
int strv_env_assign(char ***l, const char *key, const char *value);
+int _strv_env_assign_many(char ***l, ...) _sentinel_;
+#define strv_env_assign_many(l, ...) _strv_env_assign_many(l, __VA_ARGS__, NULL)
char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) _pure_;
char *strv_env_get(char **x, const char *n) _pure_;
assert_se(streq(a[0], "a=A"));
}
+TEST(strv_env_assign_many) {
+ _cleanup_strv_free_ char **a = NULL;
+
+ assert_se(strv_env_assign_many(&a, "a", "a", "b", "b") >= 0);
+
+ assert_se(strv_length(a) == 2);
+ assert_se(strv_contains(a, "a=a"));
+ assert_se(strv_contains(a, "b=b"));
+
+ assert_se(strv_env_assign_many(&a, "a", "A", "b", "b", "c", "c") >= 0);
+ assert_se(strv_length(a) == 3);
+ assert_se(strv_contains(a, "a=A"));
+ assert_se(strv_contains(a, "b=b"));
+ assert_se(strv_contains(a, "c=c"));
+
+ assert_se(strv_env_assign_many(&a, "b", NULL, "c", "C") >= 0);
+ assert_se(strv_length(a) == 2);
+ assert_se(strv_contains(a, "a=A"));
+ assert_se(strv_contains(a, "c=C"));
+
+ assert_se(strv_env_assign_many(&a, "a=", "B") == -EINVAL);
+ assert_se(strv_length(a) == 2);
+ assert_se(strv_contains(a, "a=A"));
+ assert_se(strv_contains(a, "c=C"));
+}
+
TEST(env_strv_get_n) {
const char *_env[] = {
"FOO=NO NO NO",