X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/20b2e9cef70ef6ab6e28904a508569a86a5df7d0..c9a59880f0ddf58c700834fea80c08c39c27ccb3:/lib/wildmatch.c diff --git a/lib/wildmatch.c b/lib/wildmatch.c index 1d3f92f4..9276954c 100644 --- a/lib/wildmatch.c +++ b/lib/wildmatch.c @@ -19,8 +19,8 @@ #define ABORT_ALL -1 #define ABORT_TO_STARSTAR -2 -#ifdef WILD_TEST_DEPTH -int wildmatch_depth; +#ifdef WILD_TEST_ITERATIONS +int wildmatch_iteration_count; #endif static int domatch(const char *p, const char *text) @@ -28,8 +28,8 @@ static int domatch(const char *p, const char *text) int matched, special; char ch, prev; -#ifdef WILD_TEST_DEPTH - wildmatch_depth++; +#ifdef WILD_TEST_ITERATIONS + wildmatch_iteration_count++; #endif for ( ; (ch = *p) != '\0'; text++, p++) { @@ -60,7 +60,7 @@ static int domatch(const char *p, const char *text) if (*p == '\0') { /* Trailing "**" matches everything. Trailing "*" matches * only if there are no more slash characters. */ - return special? TRUE : strchr(text, '/') == 0; + return special? TRUE : strchr(text, '/') == NULL; } for ( ; *text; text++) { if ((matched = domatch(p, text)) != FALSE) { @@ -72,21 +72,16 @@ static int domatch(const char *p, const char *text) } return ABORT_ALL; case '[': - special = *++p == NEGATE_CLASS ? TRUE : FALSE; + ch = *++p; + /* Assign literal TRUE/FALSE because of "matched" comparison. */ + special = ch == NEGATE_CLASS? TRUE : FALSE; if (special) { /* Inverted character class. */ - p++; + ch = *++p; } prev = 0; matched = FALSE; - ch = *p; - if (ch == ']' || ch == '-') { - if (*text == ch) - matched = TRUE; - prev = ch; - ch = *++p; - } - for ( ; ch != ']'; prev = ch, ch = *++p) { + do { if (!ch) return FALSE; if (ch == '-' && prev && p[1] && p[1] != ']') { @@ -96,7 +91,7 @@ static int domatch(const char *p, const char *text) } else if (*text == ch) matched = TRUE; - } + } while (prev = ch, (ch = *++p) != ']'); if (matched == special) return FALSE; continue; @@ -108,8 +103,8 @@ static int domatch(const char *p, const char *text) int wildmatch(const char *p, const char *text) { -#ifdef WILD_TEST_DEPTH - wildmatch_depth = 0; +#ifdef WILD_TEST_ITERATIONS + wildmatch_iteration_count = 0; #endif return domatch(p, text) == TRUE; }