summaryrefslogtreecommitdiff
path: root/src/basic/extract-word.c
diff options
context:
space:
mode:
authorFilipe Brandenburger <filbranden@google.com>2015-11-05 21:57:26 -0800
committerFilipe Brandenburger <filbranden@google.com>2015-11-05 21:57:26 -0800
commit0247447e96f1385cf0c48e3e6b696214fbe36802 (patch)
tree5847461a86e67da35f285f103d7d19ee419d4fb0 /src/basic/extract-word.c
parent27fc921b658adc5baa988c4c213888b016a60b18 (diff)
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.
Diffstat (limited to 'src/basic/extract-word.c')
-rw-r--r--src/basic/extract-word.c20
1 files changed, 9 insertions, 11 deletions
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;