From 0247447e96f1385cf0c48e3e6b696214fbe36802 Mon Sep 17 00:00:00 2001 From: Filipe Brandenburger Date: Thu, 5 Nov 2015 21:57:26 -0800 Subject: extract-word: Skip coalesced separators in place Just skip them in place, instead of setting separator=true. We only do that in a single place (while finding a separator outside of quote or backslash states) so we don't really need a separate state for it. Tested that no regressions were introduced in test-extract-word. Ran a full `make check` and also installed the binaries on a test system and did not see any issues related to parsing unit files or starting units after a reboot. --- src/basic/extract-word.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'src/basic/extract-word.c') diff --git a/src/basic/extract-word.c b/src/basic/extract-word.c index 67511a32e1..ff6d211ef4 100644 --- a/src/basic/extract-word.c +++ b/src/basic/extract-word.c @@ -34,7 +34,6 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra char quote = 0; /* 0 or ' or " */ bool backslash = false; /* whether we've just seen a backslash */ - bool separator = false; /* whether we've just seen a separator */ assert(p); assert(ret); @@ -140,14 +139,6 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra } } - } else if (separator) { - for (;; (*p) ++, c = **p) { - if (c == 0) - goto finish_force_terminate; - if (!strchr(separators, c)) - goto finish; - } - } else { for (;; (*p) ++, c = **p) { if (c == 0) @@ -163,8 +154,15 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra (*p) ++; goto finish_force_next; } - separator = true; - break; + /* Skip additional coalesced separators. */ + for (;; (*p) ++, c = **p) { + if (c == 0) + goto finish_force_terminate; + if (!strchr(separators, c)) + break; + } + goto finish; + } else { if (!GREEDY_REALLOC(s, allocated, sz+2)) return -ENOMEM; -- cgit v1.2.3