applied patch from Sander Vesik improving the quality of the hash

* hash.c: applied patch from Sander Vesik improving the quality of
  the hash function.
Daniel
diff --git a/hash.c b/hash.c
index f01e6b9..4000f8d 100644
--- a/hash.c
+++ b/hash.c
@@ -66,20 +66,17 @@
     if (name != NULL) {
 	value += 30 * (*name);
 	while ((ch = *name++) != 0) {
-	    /* value *= 31; */
-	    value += (unsigned long)ch;
+	    value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
 	}
     }
     if (name2 != NULL) {
 	while ((ch = *name2++) != 0) {
-	    /* value *= 31; */
-	    value += (unsigned long)ch;
+	    value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
 	}
     }
     if (name3 != NULL) {
 	while ((ch = *name3++) != 0) {
-	    /* value *= 31; */
-	    value += (unsigned long)ch;
+	    value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
 	}
     }
     return (value % table->size);