From: Anders Kaseorg Date: Fri, 16 Dec 2016 07:16:20 +0000 (-0500) Subject: opr: Make opr_jhash_opaque endian-independent X-Git-Tag: BP-openafs-stable-1_8_x~73 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=958120b89d62c8567ab00bc697c4fabdfecd46b4 opr: Make opr_jhash_opaque endian-independent 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 --- diff --git a/src/opr/jhash.h b/src/opr/jhash.h index 5c6e3ad..e7b7d5d 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;