[Bf-blender-cvs] [fdae9e1e03e] master: BLI_array_store: correct hashing single bytes

Campbell Barton noreply at git.blender.org
Sat Oct 28 09:31:49 CEST 2017


Commit: fdae9e1e03e1fabf9e88a81a9b9bbee23bc1f456
Author: Campbell Barton
Date:   Sat Oct 28 18:28:55 2017 +1100
Branches: master
https://developer.blender.org/rBfdae9e1e03e1fabf9e88a81a9b9bbee23bc1f456

BLI_array_store: correct hashing single bytes

The single byte version of hash_data was casting from unsigned char
instead of signed.

This didn't cause any errors since the result of each aren't compared.
Even so, better keep them matching.

===================================================================

M	source/blender/blenlib/intern/array_store.c

===================================================================

diff --git a/source/blender/blenlib/intern/array_store.c b/source/blender/blenlib/intern/array_store.c
index d3a63aceb89..5b1715bbb3d 100644
--- a/source/blender/blenlib/intern/array_store.c
+++ b/source/blender/blenlib/intern/array_store.c
@@ -763,7 +763,7 @@ static void bchunk_list_fill_from_array(
 
 BLI_INLINE uint hash_data_single(const uchar p)
 {
-	return (HASH_INIT << 5) + HASH_INIT + (unsigned int)p;
+	return ((HASH_INIT << 5) + HASH_INIT) + (unsigned int)(*((signed char *)&p));
 }
 
 /* hash bytes, from BLI_ghashutil_strhash_n */
@@ -773,7 +773,7 @@ static uint hash_data(const uchar *key, size_t n)
 	unsigned int h = HASH_INIT;
 
 	for (p = (const signed char *)key; n--; p++) {
-		h = (h << 5) + h + (unsigned int)*p;
+		h = ((h << 5) + h) + (unsigned int)*p;
 	}
 
 	return h;



More information about the Bf-blender-cvs mailing list