backend: make it clear that we passed 'fd' to the new thread
[fio.git] / crc / fnv.c
CommitLineData
41177ed3
JA
1#include "fnv.h"
2
3#define FNV_PRIME 0x100000001b3ULL
4
855f0362
JA
5/*
6 * 64-bit fnv, but don't require 64-bit multiples of data. Use bytes
7 * for the last unaligned chunk.
8 */
41177ed3
JA
9uint64_t fnv(const void *buf, uint32_t len, uint64_t hval)
10{
11 const uint64_t *ptr = buf;
41177ed3 12
855f0362 13 while (len) {
41177ed3 14 hval *= FNV_PRIME;
855f0362
JA
15 if (len >= sizeof(uint64_t)) {
16 hval ^= (uint64_t) *ptr++;
17 len -= sizeof(uint64_t);
18 continue;
19 } else {
20 const uint8_t *ptr8 = (const uint8_t *) ptr;
21 uint64_t val = 0;
22 int i;
23
24 for (i = 0; i < len; i++) {
25 val <<= 8;
26 val |= (uint8_t) *ptr8++;
27 }
28 hval ^= val;
29 break;
30 }
41177ed3
JA
31 }
32
33 return hval;
34}