return h & handle->hash_mask;
return h;
hash_code (handle, string)     struct hash_control *handle;     const char *string;{#if 1 /* There seems to be some interesting property of this function	 that prevents the bfd version below from being an adequate	 substitute.  @@ Figure out what this property is!  */  long h;		/* hash code built here */  long c;		/* each character lands here */  int n;		/* Amount to shift h by */  n = (handle->hash_sizelog - 3);  h = 0;  while ((c = *string++) != 0)    {      h += c;      h = (h << 3) + (h >> n) + c;    }  return (h & handle->hash_mask);#else  /* from bfd */  unsigned long h = 0;  unsigned int len = 0;  unsigned int c;  while ((c = *string++) != 0)    {      h += c + (c << 17);      h ^= h >> 2;      ++len;    }  h += len + (len << 17);  h ^= h >> 2;  return h & handle->hash_mask;#endif}