extract_first_word: Refactor EXTRACT_DONT_COALESCE_SEPARATORS handling

Refactor allocation of the result string to the top, since it is
currently done in both branches of the condition.

Remove unreachable code checking for EXTRACT_DONT_COALESCE_SEPARATORS
when state == SEPARATOR (the only place where SEPARATOR is assigned to
state follows a check for EXTRACT_DONT_COALESCE_SEPARATORS that jumps to
the end of the function.)

Tested by running test-util successfully.

Follow up to: 206644aede
This commit is contained in:
Filipe Brandenburger 2015-08-30 19:40:44 -07:00
parent d3ef6c5560
commit 8ab00959fb

View file

@ -5754,15 +5754,14 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra
switch (state) {
case START:
if (c == 0) {
if (flags & EXTRACT_DONT_COALESCE_SEPARATORS)
if (!GREEDY_REALLOC(s, allocated, sz+1))
return -ENOMEM;
if (flags & EXTRACT_DONT_COALESCE_SEPARATORS)
if (!GREEDY_REALLOC(s, allocated, sz+1))
return -ENOMEM;
if (c == 0)
goto finish_force_terminate;
} else if (strchr(separators, c)) {
else if (strchr(separators, c)) {
if (flags & EXTRACT_DONT_COALESCE_SEPARATORS) {
if (!GREEDY_REALLOC(s, allocated, sz+1))
return -ENOMEM;
(*p) ++;
goto finish_force_next;
}
@ -5891,8 +5890,6 @@ end_escape:
case SEPARATOR:
if (c == 0)
goto finish_force_terminate;
if (flags & EXTRACT_DONT_COALESCE_SEPARATORS)
goto finish_force_next;
if (!strchr(separators, c))
goto finish;
break;