From 958120b89d62c8567ab00bc697c4fabdfecd46b4 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Fri, 16 Dec 2016 02:16:20 -0500 Subject: [PATCH] opr: Make opr_jhash_opaque endian-independent MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit gcc -O2 produces exactly the same code for this on little-endian systems, but now big-endian systems have a chance of passing ‘make check’. Change-Id: Ifc6350648355a0a9f79184439e3f9522cd6f2ffa Reviewed-on: https://gerrit.openafs.org/12493 Reviewed-by: Michael Meffie Tested-by: Michael Meffie Reviewed-by: Benjamin Kaduk --- src/opr/jhash.h | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/opr/jhash.h b/src/opr/jhash.h index 5c6e3ad6c..e7b7d5d53 100644 --- a/src/opr/jhash.h +++ b/src/opr/jhash.h @@ -123,16 +123,23 @@ opr_jhash_opaque(const void *val, size_t length, afs_uint32 initval) { const unsigned char *str = (const unsigned char *) val; afs_uint32 a,b,c; - afs_uint32 k[3]; /* Set up the internal state */ a = b = c = 0xdeadbeef + (((afs_uint32)length)<<2) + initval; while (length > 12) { - memcpy(&k, str, 12); - a += k[0]; - b += k[1]; - c += k[2]; + a += (afs_uint32) str[3]<<24 | + (afs_uint32) str[2]<<16 | + (afs_uint32) str[1]<<8 | + (afs_uint32) str[0]; + b += (afs_uint32) str[7]<<24 | + (afs_uint32) str[6]<<16 | + (afs_uint32) str[5]<<8 | + (afs_uint32) str[4]; + c += (afs_uint32) str[11]<<24 | + (afs_uint32) str[10]<<16 | + (afs_uint32) str[9]<<8 | + (afs_uint32) str[8]; opr_jhash_mix(a, b, c); length -= 12; str += 12; -- 2.39.5