24 lines
959 B
C
24 lines
959 B
C
/*
|
|
* Xhash is an array of HSHSIZ bits (HSHSIZ / 8 chars), which are used
|
|
* to hash execs. If it is allocated (havhash true), then to tell
|
|
* whether ``name'' is (possibly) present in the i'th component
|
|
* of the variable path, you look at the bit in xhash indexed by
|
|
* hash(hashname("name"), i). This is setup automatically
|
|
* after .login is executed, and recomputed whenever ``path'' is
|
|
* changed.
|
|
* The two part hash function is designed to let texec() call the
|
|
* more expensive hashname() only once and the simple hash() several
|
|
* times (once for each path component checked).
|
|
* Byte size is assumed to be 8.
|
|
*/
|
|
#define HSHSIZ 8192 /* 1k bytes */
|
|
#define HSHMASK (HSHSIZ - 1)
|
|
#define HSHMUL 243
|
|
char xhash[HSHSIZ / 8];
|
|
#define hash(a, b) ((a) * HSHMUL + (b) & HSHMASK)
|
|
#define bit(h, b) ((h)[(b) >> 3] & 1 << ((b) & 7)) /* bit test */
|
|
#define bis(h, b) ((h)[(b) >> 3] |= 1 << ((b) & 7)) /* bit set */
|
|
#ifdef VFORK
|
|
int hits, misses;
|
|
#endif
|