[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