unsigned hash_pjw ( name ) unsigned char *name; { unsigned hash_val = 0; unsigned i; for (; *name ; ++name ) { hash_val = (hash_val << 4) + *name ; if ( i = hash_val & 0xf0000000) { hash_val = ( hash_val ^ (i >> 24)) ; hash_val = hash_val ^ i; } } return hash_val; }