diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-01-17 16:48:48 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-01-17 16:57:18 +0100 |
commit | 565cd16a9497be4cba45feac84d1bf0876b8b223 (patch) | |
tree | e57632f1a24ae02c9c2e8895f993636ba8d2378c | |
parent | acd3dbde51e01a57c4f3301cce4c6c19fd5cc449 (diff) |
repair expansion of filename macros
Commit ec14a51b introduced this regression.
Change-Id: Ieabd8ccf859456eba0a42fc39f42889f67115f0f
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r-- | src/jomlib/parser.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/jomlib/parser.cpp b/src/jomlib/parser.cpp index 7765ed3..44f6a73 100644 --- a/src/jomlib/parser.cpp +++ b/src/jomlib/parser.cpp @@ -315,13 +315,40 @@ static QStringList splitTargetNames(const QString& str) return lst; } +static bool containsWildcard(const QString &str) +{ + // Scan for * and ? but ignore patterns like $* and $? + enum State { + InitialState, + AfterDollarState, + AfterDollarParenState + }; + State s = InitialState; + for (int i = 0; i < str.length(); ++i) { + const QChar ch = str.at(i); + if (ch == MacroTable::fileNameMacroMagicEscape) { + s = AfterDollarState; + continue; + } + if (s == AfterDollarState) { + s = (ch.unicode() == '(') ? AfterDollarParenState : InitialState; + } else if (s == AfterDollarParenState) { + s = InitialState; + } else { + const ushort c = ch.unicode(); + if (c == '*' || c == '?') + return true; + } + } + return false; +} + static QStringList expandWildcards(const QString &dirPath, const QStringList &lst) { QStringList result; result.reserve(lst.count()); - const QRegExp rex(QLatin1String("[*?]")); foreach (const QString &str, lst) { - if (str.contains(rex)) { + if (containsWildcard(str)) { QDirIterator dit(dirPath, QStringList(str)); while (dit.hasNext()) { QString filePath = dit.next(); |