1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-05 06:52:22 +03:00

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.
This commit is contained in:
Filipe Brandenburger 2015-11-05 21:57:26 -08:00
parent 27fc921b65
commit 0247447e96

View File

@ -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;