home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume23 / sps2 / part03 / hashuid.c < prev    next >
C/C++ Source or Header  |  1991-01-08  |  2KB  |  64 lines

  1. # ifndef lint
  2. static char SccsId[] =  "@(#)hashuid.c    1.1\t10/1/88" ;
  3. # endif
  4.  
  5. # include       "sps.h"
  6.  
  7. /* The hashing functions themselves ... */
  8. # define        HASHFN1( a )            (((unsigned)(a)*91 + 17) % MAXUSERS)
  9. # define        HASHFN2( a )            (((unsigned)(a) + 47) % MAXUSERS)
  10.  
  11. /*
  12. ** HASHUID - Returns a pointer to a slot in the hash table that corresponds
  13. ** to the hash table entry for `uid'. It returns a null pointer if there is
  14. ** no such slot.
  15. */
  16. struct hashtab  *hashuid ( uid )
  17.  
  18. int                             uid ;
  19.  
  20. {
  21.     register struct hashtab *hp ;
  22.     register int            i ;
  23.     register int            j ;
  24.     extern struct info      Info ;
  25.  
  26.     j = HASHFN1( uid ) ;
  27.     for ( i = 0 ; i < MAXUSERS ; i++ )
  28.     {
  29.         hp = &Info.i_hnames[ j ] ;
  30.         if ( !hp->h_uname[0] )
  31.             return ( (struct hashtab*)0 ) ;
  32.         if ( hp->h_uid == uid )
  33.             return ( hp ) ;
  34.         j = HASHFN2( j ) ;
  35.     }
  36.     return ( (struct hashtab*)0 ) ;
  37. }
  38.  
  39. /*
  40. ** HASHNEXT - Returns a pointer to the next slot in the hash table that
  41. ** may be use for storing information for `uid'. It returns a null pointer
  42. ** if there are no more free slots available.
  43. */
  44. struct hashtab  *hashnext ( uid )
  45.  
  46. int                             uid ;
  47.  
  48. {
  49.     register struct hashtab *hp ;
  50.     register int            i ;
  51.     register int            j ;
  52.     extern struct info      Info ;
  53.  
  54.     j = HASHFN1( uid ) ;
  55.     for ( i = 0 ; i < MAXUSERS ; i++ )
  56.     {
  57.         hp = &Info.i_hnames[ j ] ;
  58.         if ( !hp->h_uname[0] )
  59.             return ( hp ) ;
  60.         j = HASHFN2( j ) ;
  61.     }
  62.     return ( (struct hashtab*)0 ) ;
  63. }
  64.