summaryrefslogtreecommitdiff
path: root/shared/nm-utils/nm-hash-utils.c
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-11-15 15:33:32 +0100
committerThomas Haller <thaller@redhat.com>2017-11-16 11:49:51 +0100
commitecd106101bcdd9ac56aac8765bf828f7137cc7e3 (patch)
tree853208513f9fcae8e9c868f5b1b4027d10296eff /shared/nm-utils/nm-hash-utils.c
parentc3d98a3df6432f3d9d143dec6d328feec0873b4a (diff)
downloadNetworkManager-ecd106101bcdd9ac56aac8765bf828f7137cc7e3.tar.gz
shared: use siphash24() for nm_hash_ptr()
siphash24() mixes the bits much better then our naive xor. Don't bypass siphash24(). We supposedly use it for the better hashing properties, so use it also for pointers.
Diffstat (limited to 'shared/nm-utils/nm-hash-utils.c')
-rw-r--r--shared/nm-utils/nm-hash-utils.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/shared/nm-utils/nm-hash-utils.c b/shared/nm-utils/nm-hash-utils.c
index 0d0ba373a1..e4daf1a07c 100644
--- a/shared/nm-utils/nm-hash-utils.c
+++ b/shared/nm-utils/nm-hash-utils.c
@@ -143,16 +143,13 @@ nm_str_hash (gconstpointer str)
guint
nm_hash_ptr (gconstpointer ptr)
{
- guint h;
-
- h = ((const guint *) _get_hash_key ())[0];
-
- if (sizeof (ptr) <= sizeof (guint))
- h = h ^ ((guint) ((uintptr_t) ptr));
- else
- h = h ^ ((guint) (((guint64) (uintptr_t) ptr) >> 32)) ^ ((guint) ((uintptr_t) ptr));
+ NMHashState h;
- return h ?: 2907677551u;
+ if (!ptr)
+ return nm_hash_static (2907677551u);
+ nm_hash_init (&h, 2907677551u);
+ nm_hash_update (&h, &ptr, sizeof (ptr));
+ return nm_hash_complete (&h);
}
guint