(linenum→info "unix/slp.c:2238")

glibc/2.7/intl/hash-string.c

    1: /* Implements a string hashing function.
    2:    Copyright (C) 1995, 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
    3:    This file is part of the GNU C Library.
    4: 
    5:    The GNU C Library is free software; you can redistribute it and/or
    6:    modify it under the terms of the GNU Lesser General Public
    7:    License as published by the Free Software Foundation; either
    8:    version 2.1 of the License, or (at your option) any later version.
    9: 
   10:    The GNU C Library is distributed in the hope that it will be useful,
   11:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   12:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   13:    Lesser General Public License for more details.
   14: 
   15:    You should have received a copy of the GNU Lesser General Public
   16:    License along with the GNU C Library; if not, write to the Free
   17:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   18:    02111-1307 USA.  */
   19: 
   20: #include "hash-string.h"
   21: 
   22: 
   23: /* Defines the so called `hashpjw' function by P.J. Weinberger
   24:    [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
   25:    1986, 1987 Bell Telephone Laboratories, Inc.]  */
   26: unsigned long int
   27: __hash_string (str_param)
   28:      const char *str_param;
   29: {
   30:   unsigned long int hval, g;
   31:   const char *str = str_param;
   32: 
   33:   /* Compute the hash value for the given string.  */
   34:   hval = 0;
   35:   while (*str != '\0')
   36:     {
   37:       hval <<= 4;
   38:       hval += (unsigned char) *str++;
   39:       g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
   40:       if (g != 0)
   41:         {
   42:           hval ^= g >> (HASHWORDBITS - 8);
   43:           hval ^= g;
   44:         }
   45:     }
   46:   return hval;
   47: }
Syntax (Markdown)