summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-01-17 16:48:48 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-01-17 16:57:18 +0100
commit565cd16a9497be4cba45feac84d1bf0876b8b223 (patch)
treee57632f1a24ae02c9c2e8895f993636ba8d2378c
parentacd3dbde51e01a57c4f3301cce4c6c19fd5cc449 (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.cpp31
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();