From db5c28fa0e392a68836d9a97bb2add3a94ddb37c Mon Sep 17 00:00:00 2001 From: Robin Burchell Date: Fri, 2 Mar 2012 15:05:59 +0100 Subject: [PATCH] Use correct types in QResource. qHash() returns uint, not int, so change all interactions with hashing to use uint to match. This blocks the introduction of a new (better) hashing algorithm because it currently breaks numerous tests: rcc would (correctly) write a uint hash value to the qrc files, but QResource would attempt to mangle it around as an int. This wasn't a problem with the old hash, because it deliberately threw away data (h &= 0x0fffffff), possibly because of someone not being able to diagnose precisly this problem. Change-Id: I46fb42acc100fdd3bedd714f6dc91aeca91d0351 Reviewed-by: hjk --- src/corelib/io/qresource.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index e46ab26..fb3a24b 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -114,7 +114,7 @@ class QResourceRoot }; const uchar *tree, *names, *payloads; inline int findOffset(int node) const { return node * 14; } //sizeof each tree element - int hash(int node) const; + uint hash(int node) const; QString name(int node) const; short flags(int node) const; public: @@ -594,7 +594,7 @@ QResource::searchPaths() return *resourceSearchPaths(); } -inline int QResourceRoot::hash(int node) const +inline uint QResourceRoot::hash(int node) const { if(!node) //root return 0; @@ -673,13 +673,13 @@ int QResourceRoot::findNode(const QString &_path, const QLocale &locale) const qDebug() << " " << child+j << " :: " << name(child+j); } #endif - const int h = qHash(segment); + const uint h = qHash(segment); //do the binary search for the hash int l = 0, r = child_count-1; int sub_node = (l+r+1)/2; while(r != l) { - const int sub_node_hash = hash(child+sub_node); + const uint sub_node_hash = hash(child+sub_node); if(h == sub_node_hash) break; else if(h < sub_node_hash) -- 2.7.4