home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / cputt / hash.c < prev    next >
C/C++ Source or Header  |  1992-04-18  |  1KB  |  49 lines

  1. # include       "cputt.h"
  2. # include       <pwd.h>
  3.  
  4. # define        HASHFN1( a ) (((unsigned)(a)*91 + 17) % MAXUSERS)
  5.  
  6. /*
  7.    HASHUID - Returns a pointer to a slot in the hash table that corresponds
  8.    to the hash table entry for `uid'. It returns a null pointer if there is
  9.    no such slot.
  10. */
  11.  
  12. struct hashtab  *hashuid ( uid )
  13.  
  14. int    uid ;
  15.  
  16. {
  17.      struct hashtab *hp ;
  18.      extern struct info      Info ;
  19.  
  20.      hp = &Info.i_hnames[ HASHFN1( uid ) ];
  21.      if ( hp->h_uid == uid )
  22.           return ( hp ) ;
  23.      return ( (struct hashtab*)0 ) ;
  24. }
  25.  
  26. /*
  27.    INITUSERS - builds the uid hash table.
  28. */
  29.  
  30. initusers ()
  31. {
  32.      struct passwd  *pw ;
  33.      struct hashtab *hp ;
  34.      struct passwd  *getpwent() ;
  35.  
  36.      while ( pw = getpwent() )
  37.      {
  38.           /* Try to find a free slot in the hash table and fill it. */
  39.  
  40.           hp = &Info.i_hnames[ HASHFN1(pw->pw_uid) ];
  41.           if ( !hp->h_uname[0] )
  42.           {
  43.                hp->h_uid = pw->pw_uid ;
  44.                strncpy( hp->h_uname, pw->pw_name, UNAMELEN );
  45.           }
  46.      }
  47.      endpwent() ;
  48. }
  49.