diff options
Diffstat (limited to 'src/tools/rcc')
-rw-r--r-- | src/tools/rcc/main.cpp | 9 | ||||
-rw-r--r-- | src/tools/rcc/rcc.cpp | 4 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/tools/rcc/main.cpp b/src/tools/rcc/main.cpp index 3873e74ee5..ad20b9e3ac 100644 --- a/src/tools/rcc/main.cpp +++ b/src/tools/rcc/main.cpp @@ -47,6 +47,8 @@ #include <QFile> #include <QFileInfo> #include <QTextStream> +#include <QAtomicInt> +#include <QtGlobal> QT_BEGIN_NAMESPACE @@ -254,9 +256,16 @@ int runRcc(int argc, char *argv[]) return library.output(out, errorDevice) ? 0 : 1; } +Q_CORE_EXPORT extern QBasicAtomicInt qt_qhash_seed; // from qhash.cpp + QT_END_NAMESPACE int main(int argc, char *argv[]) { + // rcc uses a QHash to store files in the resource system. + // we must force a certain hash order when testing or tst_rcc will fail, see QTBUG-25078 + if (!qgetenv("QT_RCC_TEST").isEmpty() && !qt_qhash_seed.testAndSetRelaxed(-1, 0)) + qFatal("Cannot force QHash seed for testing as requested"); + return QT_PREPEND_NAMESPACE(runRcc)(argc, argv); } diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp index 740ae91b68..2f2cfb679b 100644 --- a/src/tools/rcc/rcc.cpp +++ b/src/tools/rcc/rcc.cpp @@ -298,7 +298,7 @@ qint64 RCCFileInfo::writeDataName(RCCResourceLibrary &lib, qint64 offset) offset += 2; // write the hash - lib.writeNumber4(qHash(m_name)); + lib.writeNumber4(qt_hash(m_name)); if (text) lib.writeString("\n "); offset += 4; @@ -882,7 +882,7 @@ bool RCCResourceLibrary::writeDataNames() static bool qt_rcc_compare_hash(const RCCFileInfo *left, const RCCFileInfo *right) { - return qHash(left->m_name) < qHash(right->m_name); + return qt_hash(left->m_name) < qt_hash(right->m_name); } bool RCCResourceLibrary::writeDataStructure() |