41{ int j;
42 unsigned long *lp, lword, hval = 0;
43 int hl = sizeof(hval);
44
45
46
47 if (KeyLen <= hl)
48 {memcpy(&hval, KeyVal, (size_t)KeyLen);
49 return hval;
50 }
51
52
53
54 hval = KeyLen;
55 j = KeyLen % hl; KeyLen /= hl;
56 if (j)
57 {memcpy(&lword, KeyVal, (size_t)hl);
58 hval ^= lword;
59 }
60 lp = (unsigned long *)&KeyVal[j];
61
62
63
64 while(KeyLen--)
65 {memcpy(&lword, lp++, (size_t)hl);
66 hval ^= lword;
67 }
68 return (hval ? hval : 1);
69}