diff options
-rw-r--r-- | src/core/main.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/core/main.c b/src/core/main.c index e232be88c0..e5d9ec1a4e 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -539,8 +539,6 @@ static int config_parse_join_controllers(const char *unit, void *userdata) { unsigned n = 0; - const char *word, *state; - size_t length; assert(filename); assert(lvalue); @@ -548,16 +546,18 @@ static int config_parse_join_controllers(const char *unit, free_join_controllers(); - FOREACH_WORD_QUOTED(word, length, rvalue, state) { - char *s, **l; - - s = strndup(word, length); - if (!s) - return log_oom(); + for (;;) { + _cleanup_free_ char *word = NULL; + char **l; + int r; - l = strv_split(s, ","); - free(s); + r = extract_first_word(&rvalue, &word, WHITESPACE, EXTRACT_QUOTES); + if (r < 0) + return r; + if (r == 0) + break; + l = strv_split(word, ","); strv_uniq(l); if (strv_length(l) <= 1) { @@ -617,7 +617,7 @@ static int config_parse_join_controllers(const char *unit, arg_join_controllers = t; } } - if (!isempty(state)) + if (!isempty(rvalue)) log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Trailing garbage, ignoring."); |