From 3976435a109cf8586ecd362b2f320b0ee9044c25 Mon Sep 17 00:00:00 2001 From: Eugene Crosser Date: Fri, 15 Mar 2019 09:49:22 +0100 Subject: [PATCH] add hash64 function --- src/Makefile | 2 +- src/hash64.c | 11 +++++++++++ src/hash64.h | 8 ++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/hash64.c create mode 100644 src/hash64.h diff --git a/src/Makefile b/src/Makefile index 2ce7e75..75e70a1 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,7 +2,7 @@ CFLAGS = -pthread -Wall -I../include ARFLAGS = rcsv LIB = libpsmb.a -OBJ = psmb_socket.o +OBJ = psmb_socket.o hash64.o all: $(LIB) diff --git a/src/hash64.c b/src/hash64.c new file mode 100644 index 0000000..fef4aa8 --- /dev/null +++ b/src/hash64.c @@ -0,0 +1,11 @@ +/* Lifted from https://stackoverflow.com/a/13326345/2786866 */ + +#include "hash64.h" + +uint64_t hash64(void *data, size_t size) +{ + uint64_t mix = 0, mulp = 2654435789; + for (int i = 0; i < size; i++) + mix += (((uint8_t *)data)[i] * mulp) ^ (mix >> 23); + return mix ^ (mix << 37); +} diff --git a/src/hash64.h b/src/hash64.h new file mode 100644 index 0000000..d5e44d6 --- /dev/null +++ b/src/hash64.h @@ -0,0 +1,8 @@ +#ifndef _HASH64_H + +#include +#include + +uint64_t hash64(void *data, size_t size); + +#endif -- 2.39.2