From 783181cfc11e995ad678237ebc0025a2a023c88c Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 3 Jul 2013 13:54:17 +0200 Subject: make split_value_list() even less sane again contrary to what one may expect, it's actually *not* supposed to remove the meta-characters it interprets. luckily, this function is not used much any more ... Task-number: QTBUG-31877 Change-Id: I2b60f9b173140da78db2b07b596cc2e5f6e6d555 Reviewed-by: Joerg Bornemann --- qmake/library/qmakeevaluator.cpp | 13 ++++++++----- tests/auto/tools/qmake/testdata/functions/functions.pro | 2 ++ tests/auto/tools/qmake/testdata/functions/textfile | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 tests/auto/tools/qmake/testdata/functions/textfile diff --git a/qmake/library/qmakeevaluator.cpp b/qmake/library/qmakeevaluator.cpp index 01f008c3cf..09ea231684 100644 --- a/qmake/library/qmakeevaluator.cpp +++ b/qmake/library/qmakeevaluator.cpp @@ -276,6 +276,8 @@ ProStringList QMakeEvaluator::split_value_list(const QString &vals, const ProFil ushort unicode = vals_data[x].unicode(); if (unicode == quote) { quote = 0; + hadWord = true; + build += QChar(unicode); continue; } switch (unicode) { @@ -283,7 +285,7 @@ ProStringList QMakeEvaluator::split_value_list(const QString &vals, const ProFil case '\'': quote = unicode; hadWord = true; - continue; + break; case ' ': case '\t': if (!quote) { @@ -294,22 +296,23 @@ ProStringList QMakeEvaluator::split_value_list(const QString &vals, const ProFil } continue; } - build += QChar(unicode); break; case '\\': if (x + 1 != vals_len) { ushort next = vals_data[++x].unicode(); - if (next == '\'' || next == '"' || next == '\\') + if (next == '\'' || next == '"' || next == '\\') { + build += QChar(unicode); unicode = next; - else + } else { --x; + } } // fallthrough default: hadWord = true; - build += QChar(unicode); break; } + build += QChar(unicode); } if (hadWord) ret << ProString(build).setSource(source); diff --git a/tests/auto/tools/qmake/testdata/functions/functions.pro b/tests/auto/tools/qmake/testdata/functions/functions.pro index c9e7630c85..84f97c2022 100644 --- a/tests/auto/tools/qmake/testdata/functions/functions.pro +++ b/tests/auto/tools/qmake/testdata/functions/functions.pro @@ -171,3 +171,5 @@ else: \ testReplace($$shell_quote($$in), $$out, "shell_quote") testReplace($$reverse($$list(one two three)), three two one, "reverse") + +testReplace($$cat(textfile), hi '"holla he"' 'hu!') diff --git a/tests/auto/tools/qmake/testdata/functions/textfile b/tests/auto/tools/qmake/testdata/functions/textfile new file mode 100644 index 0000000000..a8248ed6f8 --- /dev/null +++ b/tests/auto/tools/qmake/testdata/functions/textfile @@ -0,0 +1 @@ +hi "holla he" hu! -- cgit v1.2.3