diff options
Diffstat (limited to 'server/common.c')
-rw-r--r-- | server/common.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/server/common.c b/server/common.c index 1d1b7c1..dc8ed92 100644 --- a/server/common.c +++ b/server/common.c @@ -47,7 +47,7 @@ strsave (const char *sp) unsigned long hash (const char *string) { - register int hval = 0; + register unsigned long hval = 0; register char cp; while (1) { @@ -59,25 +59,25 @@ hash (const char *string) cp = *string++; if (!cp) break; - hval += cp * 9; + hval += cp * (3 + (1 << 16)); cp = *string++; if (!cp) break; - hval += cp * 17; + hval += cp * (1 + (1 << 8)); cp = *string++; if (!cp) break; - hval += cp * 65; + hval += cp * (1 + (1 << 12)); cp = *string++; if (!cp) break; - hval += cp * 129; + hval += cp * (1 + (1 << 4)); - hval += (hval & 0x7fffff) * 256; - hval &= 0x7fffffff; + hval += ((long) hval) >> 18; } + hval &= 0x7fffffff; return hval; } |