diff options
author | Martin Pitt <martin.pitt@ubuntu.com> | 2016-11-08 09:41:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-08 09:41:51 +0100 |
commit | ca91fd2acac007f0096fea47b2cc8931baa3af57 (patch) | |
tree | 4da5222881a4b3ec7e3b55dfa18fb8b7f764daa7 /src/basic | |
parent | ed7fd549d0a1bfebe4e17a3f0e92879eb986d4a9 (diff) | |
parent | bc8ec170d2bc3e294f24ff8bb255436a685ac14a (diff) |
Merge pull request #4509 from keszybz/foreach-word-quoted
Remove FOREACH_WORD_QUOTED
Diffstat (limited to 'src/basic')
-rw-r--r-- | src/basic/env-util.c | 22 | ||||
-rw-r--r-- | src/basic/env-util.h | 1 | ||||
-rw-r--r-- | src/basic/string-util.h | 3 |
3 files changed, 23 insertions, 3 deletions
diff --git a/src/basic/env-util.c b/src/basic/env-util.c index b74290d6fd..7c69ccdaf9 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -384,6 +384,28 @@ char **strv_env_unset_many(char **l, ...) { return l; } +int strv_env_replace(char ***l, char *p) { + char **f; + + assert(p); + + /* Replace first occurrence of the env var or add a new one in the + * string list. Drop other occurences. Edits in-place. Does not copy p. + */ + + for (f = *l; f && *f; f++) + if (env_match(*f, p)) { + free_and_replace(*f, p); + strv_env_unset(f + 1, p); + return 0; + } + + /* We didn't find a match, we need to append p or create a new strv */ + if (strv_push(l, p) < 0) + return -ENOMEM; + return 1; +} + char **strv_env_set(char **x, const char *p) { char **k, **r; diff --git a/src/basic/env-util.h b/src/basic/env-util.h index b1fef704c2..8cb0fc2131 100644 --- a/src/basic/env-util.h +++ b/src/basic/env-util.h @@ -44,6 +44,7 @@ char **strv_env_delete(char **x, unsigned n_lists, ...); /* New copy */ char **strv_env_set(char **x, const char *p); /* New copy ... */ char **strv_env_unset(char **l, const char *p); /* In place ... */ char **strv_env_unset_many(char **l, ...) _sentinel_; +int strv_env_replace(char ***l, char *p); /* In place ... */ char *strv_env_get_n(char **l, const char *name, size_t k) _pure_; char *strv_env_get(char **x, const char *n) _pure_; diff --git a/src/basic/string-util.h b/src/basic/string-util.h index 0175803302..e99f7964be 100644 --- a/src/basic/string-util.h +++ b/src/basic/string-util.h @@ -107,9 +107,6 @@ const char* split(const char **state, size_t *l, const char *separator, bool quo #define FOREACH_WORD_SEPARATOR(word, length, s, separator, state) \ _FOREACH_WORD(word, length, s, separator, false, state) -#define FOREACH_WORD_QUOTED(word, length, s, state) \ - _FOREACH_WORD(word, length, s, WHITESPACE, true, state) - #define _FOREACH_WORD(word, length, s, separator, quoted, state) \ for ((state) = (s), (word) = split(&(state), &(length), (separator), (quoted)); (word); (word) = split(&(state), &(length), (separator), (quoted))) |