Make it a function

This commit is contained in:
Dale Weiler 2014-09-27 04:50:50 -04:00
parent b08195e2da
commit 641136fee3

22
hash.c
View file

@ -301,14 +301,16 @@ static GMQCC_FORCEINLINE uint32_t hash_murmur(const void *GMQCC_RESTRICT key, si
#define STRLEN_ONES ((size_t)-1/UCHAR_MAX) #define STRLEN_ONES ((size_t)-1/UCHAR_MAX)
#define STRLEN_HIGHS (STRLEN_ONES * (UCHAR_MAX/2+1)) #define STRLEN_HIGHS (STRLEN_ONES * (UCHAR_MAX/2+1))
#define STRLEN_HASZERO(X) (((X)-STRLEN_ONES) & ~(X) & STRLEN_HIGHS) #define STRLEN_HASZERO(X) (((X)-STRLEN_ONES) & ~(X) & STRLEN_HIGHS)
ASAN_DISABLE size_t hash(const char *key) {
static ASAN_DISABLE size_t hash_strlen(const char *key) {
const char *s = key; const char *s = key;
const char *a = s; const char *a = s;
const size_t *w; const size_t *w;
for (; (uintptr_t)s % STRLEN_ALIGN; s++) { for (; (uintptr_t)s % STRLEN_ALIGN; s++) {
if (!*s) if (*s)
return hash_murmur((const void *)key, s-a); continue;
return s-a;
} }
VALGRIND_MAKE_MEM_DEFINED(s, STRLEN_ALIGN); VALGRIND_MAKE_MEM_DEFINED(s, STRLEN_ALIGN);
@ -321,12 +323,14 @@ ASAN_DISABLE size_t hash(const char *key) {
/* It's not legal to access this area anymore */ /* It's not legal to access this area anymore */
VALGRIND_MAKE_MEM_NOACCESS(s + 1, STRLEN_ALIGN); VALGRIND_MAKE_MEM_NOACCESS(s + 1, STRLEN_ALIGN);
return s-a;
return hash_murmur((const void *)key, s-a);
} }
#else #else
/* No way to disable asan instrumenting, use strlen. */ static GMQCC_INLINE size_t hash_strlen(const char *key) {
size_t hash(const char *key) { return strlen(key);
return hash_murmur((const void *)key, strlen(key)); }
#endif
size_t hash(const char *key) {
return hash_murmur((const void *)key, hash_strlen(key));
} }
#endif /*! HAS_ASAN_DISABLE */