chiark / gitweb /
core: clean up environment block for --user instances a bit
[elogind.git] / src / shared / env-util.c
index 7976881ef697acd0217314412cf0a344c8a75d76..b2e45531ab7ec0131e102075bc9b09397dfe0fb1 100644 (file)
@@ -310,7 +310,7 @@ char **strv_env_unset(char **l, const char *p) {
         assert(p);
 
         /* Drops every occurrence of the env var setting p in the
-         * string list. edits in-place. */
+         * string list. Edits in-place. */
 
         for (f = t = l; *f; f++) {
 
@@ -326,6 +326,43 @@ char **strv_env_unset(char **l, const char *p) {
         return l;
 }
 
+char **strv_env_unset_many(char **l, ...) {
+
+        char **f, **t;
+
+        if (!l)
+                return NULL;
+
+        /* Like strv_env_unset() but applies many at once. Edits in-place. */
+
+        for (f = t = l; *f; f++) {
+                bool found = false;
+                const char *p;
+                va_list ap;
+
+                va_start(ap, l);
+
+                while ((p = va_arg(ap, const char*))) {
+                        if (env_match(*f, p)) {
+                                found = true;
+                                break;
+                        }
+                }
+
+                va_end(ap);
+
+                if (found) {
+                        free(*f);
+                        continue;
+                }
+
+                *(t++) = *f;
+        }
+
+        *t = NULL;
+        return l;
+}
+
 char **strv_env_set(char **x, const char *p) {
 
         char **k, **r;