X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fstrv.c;h=d9aef982246c0dc158b4a190ce8832a340cfc088;hp=85599fe92c3e0b1e368402fca2d7f1cffc400f5a;hb=28c3247e7908c3625118fc374475cb08f2ce79d1;hpb=5b6319dceedd81f3f1ce7eb70ea5defaef43bcec diff --git a/src/strv.c b/src/strv.c index 85599fe92..d9aef9822 100644 --- a/src/strv.c +++ b/src/strv.c @@ -1,4 +1,4 @@ -/*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /*** This file is part of systemd. @@ -264,7 +264,7 @@ char **strv_split_quoted(const char *s) { i = 0; FOREACH_WORD_QUOTED(w, l, s, state) - if (!(r[i++] = strndup(w, l))) { + if (!(r[i++] = cunescape_length(w, l))) { strv_free(r); return NULL; } @@ -511,3 +511,48 @@ char **strv_env_delete(char **x, unsigned n_lists, ...) { return r; } + +char **strv_env_set(char **x, const char *p) { + + char **k, **r; + + if (!(r = new(char*, strv_length(x)+2))) + return NULL; + + k = r; + if (env_append(r, &k, x) < 0) + goto fail; + + if (!(*(k++) = strdup(p))) + goto fail; + + *k = NULL; + + return r; + +fail: + for (k--; k >= r; k--) + free(*k); + + free(r); + + return NULL; + +} + +char *strv_env_get_with_length(char **l, const char *name, size_t k) { + char **i; + + assert(name); + + STRV_FOREACH(i, l) + if (strncmp(*i, name, k) == 0 && + (*i)[k] == '=') + return *i + k + 1; + + return NULL; +} + +char *strv_env_get(char **l, const char *name) { + return strv_env_get_with_length(l, name, strlen(name)); +}