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;
unsigned n = 0, i = 0;
va_list aq;
-
if (x) {
n = 1;
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;