hsearch
ENTRY *hsearch __P((ENTRY, ACTION));
ENTRY *hsearch(ENTRY, ACTION);
struct __hsearch *hsearch;
hsearch = malloc(sizeof(*hsearch));
if (hsearch == NULL)
hsearch->entries = calloc(16, sizeof(ENTRY));
if (hsearch->entries == NULL) {
free(hsearch);
arc4random_buf(&hsearch->offset_basis, sizeof(hsearch->offset_basis));
hsearch->index_mask = 0xf;
hsearch->entries_used = 0;
htab->__hsearch = hsearch;
struct __hsearch *hsearch;
hsearch = htab->__hsearch;
free(hsearch->entries);
free(hsearch);
if (hsearch->entries_used * 2 >= hsearch->index_mask) {
old_count = hsearch->index_mask + 1;
old_entries = hsearch->entries;
new_count = (hsearch->index_mask + 1) * 2;
hsearch->entries = new_entries;
hsearch->index_mask = new_count - 1;
old_hash = hsearch_hash(hsearch->offset_basis,
*hsearch_lookup_free(hsearch, old_hash) =
hsearch = htab->__hsearch;
entry = hsearch_lookup_free(hsearch, hash);
++hsearch->entries_used;
hsearch_lookup_free(struct __hsearch *hsearch, size_t hash)
ENTRY *entry = &hsearch->entries[index & hsearch->index_mask];
struct __hsearch *hsearch;
hsearch = htab->__hsearch;
hash = hsearch_hash(hsearch->offset_basis, item.key);
entry = &hsearch->entries[index & hsearch->index_mask];