aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorMax Horn2008-09-05 20:29:03 +0000
committerMax Horn2008-09-05 20:29:03 +0000
commit0dcb30e75c79900d90874eb098fbec67ef0c703b (patch)
tree1b8f75d715be40c87c0756a54979795a97da1f6c /common
parente5c8ebf995a8500d5c99cc238f911eac43e8073d (diff)
downloadscummvm-rg350-0dcb30e75c79900d90874eb098fbec67ef0c703b.tar.gz
scummvm-rg350-0dcb30e75c79900d90874eb098fbec67ef0c703b.tar.bz2
scummvm-rg350-0dcb30e75c79900d90874eb098fbec67ef0c703b.zip
Optimized matchString for the common case where there is a trailing * (if that is the case, abort immediately instead of scanning the rest of the string)
svn-id: r34367
Diffstat (limited to 'common')
-rw-r--r--common/str.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/common/str.cpp b/common/str.cpp
index b2c9a7cdbf..a415e376c9 100644
--- a/common/str.cpp
+++ b/common/str.cpp
@@ -605,13 +605,18 @@ bool matchString(const char *str, const char *pat) {
for (;;) {
switch (*pat) {
case '*':
+ // Record pattern / string possition for backtracking
p = ++pat;
q = str;
+ // If pattern ended with * -> match
+ if (!*pat)
+ return true;
break;
default:
if (*pat != *str) {
if (p) {
+ // No match, oops -> try to backtrack
pat = p;
str = ++q;
if (!*str)