chiark / gitweb /
sd-login: build test code again
[elogind.git] / src / strv.c
index 1c15ee802c732581a69219e6ee127fa0ef2decc2..f15aa8736a0339a241245f01c71845f93d24d7a5 100644 (file)
@@ -67,11 +67,11 @@ void strv_free(char **l) {
 char **strv_copy(char **l) {
         char **r, **k;
 
-        if (!(r = new(char*, strv_length(l)+1)))
+        if (!(k = r = new(char*, strv_length(l)+1)))
                 return NULL;
 
         if (l)
-                for (k = r; *l; k++, l++)
+                for (; *l; k++, l++)
                         if (!(*k = strdup(*l)))
                                 goto fail;
 
@@ -525,6 +525,32 @@ char **strv_env_delete(char **x, unsigned n_lists, ...) {
         return r;
 }
 
+char **strv_env_unset(char **l, const char *p) {
+
+        char **f, **t;
+
+        if (!l)
+                return NULL;
+
+        assert(p);
+
+        /* Drops every occurrence of the env var setting p in the
+         * string list. edits in-place. */
+
+        for (f = t = l; *f; f++) {
+
+                if (env_match(*f, p)) {
+                        free(*f);
+                        continue;
+                }
+
+                *(t++) = *f;
+        }
+
+        *t = NULL;
+        return l;
+}
+
 char **strv_env_set(char **x, const char *p) {
 
         char **k, **r;