From: Filipe Brandenburger Date: Fri, 6 Nov 2015 05:57:26 +0000 (-0800) Subject: extract-word: Skip coalesced separators in place X-Git-Tag: v228~67^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0247447e96f1385cf0c48e3e6b696214fbe36802;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/basic/extract-word.c b/src/basic/extract-word.c index 67511a32e18..ff6d211ef4c 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;