mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
wildmatch: avoid using of the comma operator
The comma operator is a somewhat obscure C feature that is often used by mistake and can even cause unintentional code flow. That is why the `-Wcomma` option of clang was introduced: To identify unintentional uses of the comma operator. In this instance, the usage is intentional because it allows storing the value of the current character as `prev_ch` before making the next character the current one, all of which happens in the loop condition that lets the loop stop at a closing bracket. However, it is hard to read. The chosen alternative to using the comma operator is to move those assignments from the condition into the loop body; In this particular case that requires special care because the loop body contains a `continue` for the case where a character class is found that starts with `[:` but does not end in `:]` (and the assignments should occur even when that code path is taken), which needs to be turned into a `goto`. Helped-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Acked-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
be7a517ce4
commit
752fe9dc92
@@ -223,7 +223,7 @@ static int dowild(const uchar *p, const uchar *text, unsigned int flags)
|
|||||||
p_ch = '[';
|
p_ch = '[';
|
||||||
if (t_ch == p_ch)
|
if (t_ch == p_ch)
|
||||||
matched = 1;
|
matched = 1;
|
||||||
continue;
|
goto next;
|
||||||
}
|
}
|
||||||
if (CC_EQ(s,i, "alnum")) {
|
if (CC_EQ(s,i, "alnum")) {
|
||||||
if (ISALNUM(t_ch))
|
if (ISALNUM(t_ch))
|
||||||
@@ -268,7 +268,10 @@ static int dowild(const uchar *p, const uchar *text, unsigned int flags)
|
|||||||
p_ch = 0; /* This makes "prev_ch" get set to 0. */
|
p_ch = 0; /* This makes "prev_ch" get set to 0. */
|
||||||
} else if (t_ch == p_ch)
|
} else if (t_ch == p_ch)
|
||||||
matched = 1;
|
matched = 1;
|
||||||
} while (prev_ch = p_ch, (p_ch = *++p) != ']');
|
next:
|
||||||
|
prev_ch = p_ch;
|
||||||
|
p_ch = *++p;
|
||||||
|
} while (p_ch != ']');
|
||||||
if (matched == negated ||
|
if (matched == negated ||
|
||||||
((flags & WM_PATHNAME) && t_ch == '/'))
|
((flags & WM_PATHNAME) && t_ch == '/'))
|
||||||
return WM_NOMATCH;
|
return WM_NOMATCH;
|
||||||
|
|||||||
Reference in New Issue
Block a user