mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
Follow up to r1609680: further simplify/optimize ap_proxy_strcmp_ematch().
While at it, same treatment for its mother ap_strcmp_match(). git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1826313 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -1502,10 +1502,7 @@ static int ap_proxy_strcmp_ematch(const char *str, const char *expected)
|
|||||||
apr_size_t x, y;
|
apr_size_t x, y;
|
||||||
|
|
||||||
for (x = 0, y = 0; expected[y]; ++y, ++x) {
|
for (x = 0, y = 0; expected[y]; ++y, ++x) {
|
||||||
int backref = (expected[y] == '$' && apr_isdigit(expected[y + 1]));
|
if (expected[y] == '$' && apr_isdigit(expected[y + 1])) {
|
||||||
if (!str[x] && !backref)
|
|
||||||
return -1;
|
|
||||||
if (backref) {
|
|
||||||
do {
|
do {
|
||||||
y += 2;
|
y += 2;
|
||||||
} while (expected[y] == '$' && apr_isdigit(expected[y + 1]));
|
} while (expected[y] == '$' && apr_isdigit(expected[y + 1]));
|
||||||
@@ -1518,10 +1515,12 @@ static int ap_proxy_strcmp_ematch(const char *str, const char *expected)
|
|||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (expected[y] == '\\') {
|
else if (!str[x]) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else if (expected[y] == '\\' && !expected[++y]) {
|
||||||
/* NUL is an invalid char! */
|
/* NUL is an invalid char! */
|
||||||
if (!expected[++y])
|
return -2;
|
||||||
return -2;
|
|
||||||
}
|
}
|
||||||
if (str[x] != expected[y])
|
if (str[x] != expected[y])
|
||||||
return 1;
|
return 1;
|
||||||
|
@@ -190,8 +190,6 @@ AP_DECLARE(int) ap_strcmp_match(const char *str, const char *expected)
|
|||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
for (x = 0, y = 0; expected[y]; ++y, ++x) {
|
for (x = 0, y = 0; expected[y]; ++y, ++x) {
|
||||||
if ((!str[x]) && (expected[y] != '*'))
|
|
||||||
return -1;
|
|
||||||
if (expected[y] == '*') {
|
if (expected[y] == '*') {
|
||||||
while (expected[++y] == '*');
|
while (expected[++y] == '*');
|
||||||
if (!expected[y])
|
if (!expected[y])
|
||||||
@@ -203,6 +201,8 @@ AP_DECLARE(int) ap_strcmp_match(const char *str, const char *expected)
|
|||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
else if (!str[x])
|
||||||
|
return -1;
|
||||||
else if ((expected[y] != '?') && (str[x] != expected[y]))
|
else if ((expected[y] != '?') && (str[x] != expected[y]))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user