hashtable
extern struct hashtable *shmaddrs;
extern struct hashtable *shmaddrs;
extern struct hashtable *shmres;
extern struct hashtable *shmaddrs;
extern struct hashtable *shmres;
struct hashtable *shmres = NULL;
struct hashtable *shmaddrs = NULL;
&hashtable->entries[key & hashmask];
_hash_remove(struct hashtable *hashtable, u_long key)
u_long hashmask = hashtable->nr_elems -1;
&hashtable->entries[key & hashmask];
struct hashtable *
struct hashtable *hashtable;
hashtable = malloc(sizeof(struct hashtable));
if (!hashtable) {
hashtable->entries = malloc(hashsize * sizeof(struct entries_list));
if (!hashtable->entries) {
free(hashtable);
hashtable = NULL;
hashtable->nr_elems = hashsize;
LIST_INIT(&hashtable->entries[i]);
return hashtable;
_hash_destroy(struct hashtable *hashtable)
u_long hashmask = hashtable->nr_elems -1;
for (tmp = &hashtable->entries[0]; tmp <= &hashtable->entries[hashmask]; tmp++) {
free(hashtable->entries);
free(hashtable);
hashtable = NULL;
_hash_insert(struct hashtable *hashtable, u_long key, void *value)
u_long hashmask = hashtable->nr_elems -1;
&hashtable->entries[key & hashmask];
_hash_lookup(struct hashtable *hashtable, u_long key)
u_long hashmask = hashtable->nr_elems -1;
struct hashtable *_hash_init(int);
int _hash_destroy(struct hashtable *);
void _hash_insert(struct hashtable *, u_long, void *);
void *_hash_lookup(struct hashtable *, u_long);
void *_hash_remove(struct hashtable *, u_long);
hash_Reset(hash_tbl *hashtable, hash_freefp free_data)
bucketptr = hashtable->table;
for (i = 0; i < hashtable->size; i++) {
hashtable->bucketnum = 0;
hashtable->member = (hashtable->table)[0];
hash_Exists(hash_tbl *hashtable, unsigned hashcode, hash_cmpfp compare,
memberptr = (hashtable->table)[hashcode % (hashtable->size)];
hash_Insert(hash_tbl *hashtable, unsigned hashcode, hash_cmpfp compare,
hashcode %= hashtable->size;
if (hash_Exists(hashtable, hashcode, compare, key)) {
temp->next = (hashtable->table)[hashcode];
(hashtable->table)[hashcode] = temp;
hash_Delete(hash_tbl *hashtable, unsigned hashcode, hash_cmpfp compare,
hashcode %= hashtable->size;
memberptr = (hashtable->table)[hashcode];
(hashtable->table)[hashcode] = memberptr->next;
memberptr = (hashtable->table)[hashcode];
hash_Lookup(hash_tbl *hashtable, unsigned hashcode, hash_cmpfp compare,
memberptr = (hashtable->table)[hashcode % (hashtable->size)];
hash_NextEntry(hash_tbl *hashtable)
memberptr = hashtable->member;
hashtable->member = memberptr->next; /* Set up for next call */
bucket = hashtable->bucketnum + 1;
while ((bucket < hashtable->size) &&
!(memberptr = (hashtable->table)[bucket])) {
if (bucket >= hashtable->size) {
hashtable->bucketnum = 0;
hashtable->member = (hashtable->table)[0];
hashtable->bucketnum = bucket;
hashtable->member = memberptr->next; /* Set up for next call */
hash_FirstEntry(hash_tbl *hashtable)
hashtable->bucketnum = 0;
hashtable->member = (hashtable->table)[0];
return hash_NextEntry(hashtable);
struct filterhead hashtable[HASHSIZE];
struct filterhead *chain = etfp->hashtable + HASH(ethertype);
LIST_INIT((privdata->hashtable + i));
LIST_INSERT_HEAD( etfp->hashtable
LIST_FOREACH(fil, (etfp->hashtable + i), next) {
struct filterhead hashtable[HASHSIZE];
struct filterhead *chain = etfp->hashtable + HASH(ethertype);
LIST_INIT((privdata->hashtable + i));
LIST_INSERT_HEAD( etfp->hashtable
fil1 = LIST_FIRST(&etfp->hashtable[i]);
struct filterhead hashtable[HASHSIZE];
struct filterhead *chain = &priv->hashtable[HASH(vlan)];
LIST_INIT(&priv->hashtable[i]);
&priv->hashtable[HASH(f->vlan)], f, next);
LIST_FOREACH(f, &priv->hashtable[i], next) {
for (i = 0, chain = priv->hashtable; i < HASHSIZE;
extern struct hashtable *clientshash;
struct hashtable *clientshash = NULL;