diff options
author | Squire <squire@lindenlab.com> | 2011-06-28 11:25:42 -0700 |
---|---|---|
committer | Squire <squire@lindenlab.com> | 2011-06-28 11:25:42 -0700 |
commit | a67627777df3408ed8a5da14a8a5683e7e673a5e (patch) | |
tree | 74ca0f995a2d49d6b7b0505628097708861eb553 /indra/llvfs/lldiriterator.cpp | |
parent | fae829c8eface8cf356b63cbb82587d6950bdd79 (diff) | |
parent | 5c9fc7d24f0d060bcb86ed5b03cb9ba9c7282038 (diff) |
STORM-1372, STORM-1439
Merged in:
alain_linden/viewer-development
lindenlab/viewer-development
Diffstat (limited to 'indra/llvfs/lldiriterator.cpp')
-rw-r--r-- | indra/llvfs/lldiriterator.cpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp index 041436ed92..25550321f0 100644 --- a/indra/llvfs/lldiriterator.cpp +++ b/indra/llvfs/lldiriterator.cpp @@ -121,6 +121,14 @@ bool LLDirIterator::Impl::next(std::string &fname) return found; } +/** +Converts the incoming glob into a regex. This involves +converting incoming glob expressions to regex equivilents and +at the same time, escaping any regex meaningful characters which +do not have glob meaning, i.e. + .()+|^$ +in the input. +*/ std::string glob_to_regex(const std::string& glob) { std::string regex; @@ -135,9 +143,6 @@ std::string glob_to_regex(const std::string& glob) switch (c) { - case '.': - regex+="\\."; - break; case '*': if (glob.begin() == i) { @@ -170,8 +175,16 @@ std::string glob_to_regex(const std::string& glob) case '!': regex+= square_brace_open ? '^' : c; break; + case '.': // This collection have different regex meaning + case '^': // and so need escaping. + case '(': + case ')': + case '+': + case '|': + case '$': + regex += '\\'; default: - regex+=c; + regex += c; break; } |