Merge pull request #1083 from filbranden/configparse1

A few more tweaks to extract_first_word
This commit is contained in:
Lennart Poettering 2015-08-31 11:36:01 +02:00
commit bbc19baa50

View file

@ -5754,40 +5754,39 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra
switch (state) { switch (state) {
case START: case START:
if (c == 0) { if (flags & EXTRACT_DONT_COALESCE_SEPARATORS)
if (flags & EXTRACT_DONT_COALESCE_SEPARATORS) if (!GREEDY_REALLOC(s, allocated, sz+1))
if (!GREEDY_REALLOC(s, allocated, sz+1)) return -ENOMEM;
return -ENOMEM;
if (c == 0)
goto finish_force_terminate; goto finish_force_terminate;
} else if (strchr(separators, c)) { else if (strchr(separators, c)) {
if (flags & EXTRACT_DONT_COALESCE_SEPARATORS) { if (flags & EXTRACT_DONT_COALESCE_SEPARATORS) {
if (!GREEDY_REALLOC(s, allocated, sz+1))
return -ENOMEM;
(*p) ++; (*p) ++;
goto finish_force_next; goto finish_force_next;
} }
break; break;
} }
/* We found a non-blank character, so we will always
* want to return a string (even if it is empty),
* allocate it here. */
if (!GREEDY_REALLOC(s, allocated, sz+1))
return -ENOMEM;
state = VALUE; state = VALUE;
/* fallthrough */ /* fallthrough */
case VALUE: case VALUE:
if (c == 0) if (c == 0)
goto finish_force_terminate; goto finish_force_terminate;
else if (c == '\'' && (flags & EXTRACT_QUOTES)) { else if (c == '\'' && (flags & EXTRACT_QUOTES))
if (!GREEDY_REALLOC(s, allocated, sz+1))
return -ENOMEM;
state = SINGLE_QUOTE; state = SINGLE_QUOTE;
} else if (c == '\\') else if (c == '\\')
state = VALUE_ESCAPE; state = VALUE_ESCAPE;
else if (c == '\"' && (flags & EXTRACT_QUOTES)) { else if (c == '\"' && (flags & EXTRACT_QUOTES))
if (!GREEDY_REALLOC(s, allocated, sz+1))
return -ENOMEM;
state = DOUBLE_QUOTE; state = DOUBLE_QUOTE;
} else if (strchr(separators, c)) { else if (strchr(separators, c)) {
if (flags & EXTRACT_DONT_COALESCE_SEPARATORS) { if (flags & EXTRACT_DONT_COALESCE_SEPARATORS) {
(*p) ++; (*p) ++;
goto finish_force_next; goto finish_force_next;
@ -5891,8 +5890,6 @@ end_escape:
case SEPARATOR: case SEPARATOR:
if (c == 0) if (c == 0)
goto finish_force_terminate; goto finish_force_terminate;
if (flags & EXTRACT_DONT_COALESCE_SEPARATORS)
goto finish_force_next;
if (!strchr(separators, c)) if (!strchr(separators, c))
goto finish; goto finish;
break; break;