diff options
author | Tom Gundersen <teg@jklm.no> | 2015-11-10 14:46:53 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2015-11-10 14:46:53 +0100 |
commit | 3b6a025a4f1b52f09a84557f112ef6872d94e0ba (patch) | |
tree | 0f50ed5b64257e8cb1413670b0c01c934fac3822 | |
parent | 64d4e8f90bae62bc23851c4f5e51c2497f29247a (diff) | |
parent | 34f253f087d25e34f5dcd86d9ee42d3f68e0c219 (diff) |
Merge pull request #1827 from davidreynolds/use_extract_first_word
conf-parser: use extract_first_word
-rw-r--r-- | src/shared/conf-parser.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index 3f8eaf7d9a..486122b0fd 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -702,9 +702,6 @@ int config_parse_strv(const char *unit, void *userdata) { char ***sv = data; - const char *word, *state; - size_t l; - int r; assert(filename); assert(lvalue); @@ -727,25 +724,28 @@ int config_parse_strv(const char *unit, return 0; } - FOREACH_WORD_QUOTED(word, l, rvalue, state) { - char *n; - - n = strndup(word, l); - if (!n) + for (;;) { + char *word = NULL; + int r; + r = extract_first_word(&rvalue, &word, WHITESPACE, EXTRACT_QUOTES); + if (r == 0) + break; + if (r == -ENOMEM) return log_oom(); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, "Invalid syntax, ignoring: %s", rvalue); + break; + } - if (!utf8_is_valid(n)) { + if (!utf8_is_valid(word)) { log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, rvalue); - free(n); + free(word); continue; } - - r = strv_consume(sv, n); + r = strv_consume(sv, word); if (r < 0) return log_oom(); } - if (!isempty(state)) - log_syntax(unit, LOG_ERR, filename, line, 0, "Trailing garbage, ignoring."); return 0; } |