summaryrefslogtreecommitdiffstats
path: root/src/tools/rcc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/rcc')
-rw-r--r--src/tools/rcc/main.cpp9
-rw-r--r--src/tools/rcc/rcc.cpp4
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()