Lines Matching defs:htab
24 static struct hsearch_data htab;
40 static int resize(size_t nel, struct hsearch_data *htab)
44 size_t oldsize = htab->__tab->mask + 1;
46 ENTRY *oldtab = htab->__tab->entries;
51 htab->__tab->entries = calloc(newsize, sizeof *htab->__tab->entries);
52 if (!htab->__tab->entries) {
53 htab->__tab->entries = oldtab;
56 htab->__tab->mask = newsize - 1;
62 newe = htab->__tab->entries + (i & htab->__tab->mask);
74 return __hcreate_r(nel, &htab);
79 __hdestroy_r(&htab);
82 static ENTRY *lookup(char *key, size_t hash, struct hsearch_data *htab)
88 e = htab->__tab->entries + (i & htab->__tab->mask);
99 __hsearch_r(item, action, &e, &htab);
103 static int __hcreate_r(size_t nel, struct hsearch_data *htab)
107 htab->__tab = calloc(1, sizeof *htab->__tab);
108 if (!htab->__tab)
110 r = resize(nel, htab);
112 free(htab->__tab);
113 htab->__tab = 0;
119 static void __hdestroy_r(struct hsearch_data *htab)
121 if (htab->__tab) free(htab->__tab->entries);
122 free(htab->__tab);
123 htab->__tab = 0;
127 static int __hsearch_r(ENTRY item, ACTION action, ENTRY **retval, struct hsearch_data *htab)
130 ENTRY *e = lookup(item.key, hash, htab);
141 if (++htab->__tab->used > htab->__tab->mask - htab->__tab->mask/4) {
142 if (!resize(2*htab->__tab->used, htab)) {
143 htab->__tab->used--;
148 e = lookup(item.key, hash, htab);