From 1b617fd68b6250130bf8fb357df87a09c6691e59 Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Tue, 8 Sep 2009 14:05:16 +0300 Subject: [PATCH] Reduce the number of exit points in parseFormat() to error and ok cases - avoid a dozen redundant freeFormat() calls and dont bother NULLing local variable at the end --- lib/headerfmt.c | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/lib/headerfmt.c b/lib/headerfmt.c index 753d771..97332e7 100644 --- a/lib/headerfmt.c +++ b/lib/headerfmt.c @@ -328,10 +328,8 @@ static int parseFormat(headerSprintfArgs hsa, char * str, char * newEnd; start++; - if (parseExpression(hsa, token, start, &newEnd)) - { - format = freeFormat(format, numTokens); - return 1; + if (parseExpression(hsa, token, start, &newEnd)) { + goto errxit; } start = newEnd; break; @@ -344,8 +342,7 @@ static int parseFormat(headerSprintfArgs hsa, char * str, while (*chptr && *chptr != '{' && *chptr != '%') chptr++; if (!*chptr || *chptr == '%') { hsa->errmsg = _("missing { after %"); - format = freeFormat(format, numTokens); - return 1; + goto errxit; } *chptr++ = '\0'; @@ -367,8 +364,7 @@ static int parseFormat(headerSprintfArgs hsa, char * str, while (*next && *next != '}') next++; if (!*next) { hsa->errmsg = _("missing } after %{"); - format = freeFormat(format, numTokens); - return 1; + goto errxit; } *next++ = '\0'; @@ -379,8 +375,7 @@ static int parseFormat(headerSprintfArgs hsa, char * str, *chptr++ = '\0'; if (!*chptr) { hsa->errmsg = _("empty tag format"); - format = freeFormat(format, numTokens); - return 1; + goto errxit; } token->u.tag.type = chptr; } @@ -391,16 +386,14 @@ static int parseFormat(headerSprintfArgs hsa, char * str, if (!*start) { hsa->errmsg = _("empty tag name"); - format = freeFormat(format, numTokens); - return 1; + goto errxit; } token->type = PTOK_TAG; if (findTag(hsa, token, start)) { hsa->errmsg = _("unknown tag"); - format = freeFormat(format, numTokens); - return 1; + goto errxit; } start = next; @@ -414,16 +407,13 @@ static int parseFormat(headerSprintfArgs hsa, char * str, if (parseFormat(hsa, start, &token->u.array.format, &token->u.array.numTokens, - &start, PARSER_IN_ARRAY)) - { - format = freeFormat(format, numTokens); - return 1; + &start, PARSER_IN_ARRAY)) { + goto errxit; } if (!start) { hsa->errmsg = _("] expected at end of array"); - format = freeFormat(format, numTokens); - return 1; + goto errxit; } dst = start; @@ -435,8 +425,7 @@ static int parseFormat(headerSprintfArgs hsa, char * str, case ']': if (state != PARSER_IN_ARRAY) { hsa->errmsg = _("unexpected ]"); - format = freeFormat(format, numTokens); - return 1; + goto errxit; } *start++ = '\0'; if (endPtr) *endPtr = start; @@ -446,8 +435,7 @@ static int parseFormat(headerSprintfArgs hsa, char * str, case '}': if (state != PARSER_IN_EXPR) { hsa->errmsg = _("unexpected }"); - format = freeFormat(format, numTokens); - return 1; + goto errxit; } *start++ = '\0'; if (endPtr) *endPtr = start; @@ -484,8 +472,11 @@ static int parseFormat(headerSprintfArgs hsa, char * str, *numTokensPtr = numTokens; *formatPtr = format; - return 0; + +errxit: + freeFormat(format, numTokens); + return 1; } static int parseExpression(headerSprintfArgs hsa, sprintfToken token, -- 2.7.4