Lines Matching refs:htab

66 static void _hdelete(const char *key, struct hsearch_data *htab, ENTRY *ep,
100 int hcreate_r(size_t nel, struct hsearch_data *htab) in hcreate_r() argument
103 if (htab == NULL) { in hcreate_r()
109 if (htab->table != NULL) in hcreate_r()
117 htab->size = nel; in hcreate_r()
118 htab->filled = 0; in hcreate_r()
121 htab->table = (_ENTRY *) calloc(htab->size + 1, sizeof(_ENTRY)); in hcreate_r()
122 if (htab->table == NULL) in hcreate_r()
139 void hdestroy_r(struct hsearch_data *htab) in hdestroy_r() argument
144 if (htab == NULL) { in hdestroy_r()
150 for (i = 1; i <= htab->size; ++i) { in hdestroy_r()
151 if (htab->table[i].used > 0) { in hdestroy_r()
152 ENTRY *ep = &htab->table[i].entry; in hdestroy_r()
158 free(htab->table); in hdestroy_r()
161 htab->table = NULL; in hdestroy_r()
202 struct hsearch_data *htab) in hmatch_r() argument
207 for (idx = last_idx + 1; idx < htab->size; ++idx) { in hmatch_r()
208 if (htab->table[idx].used <= 0) in hmatch_r()
210 if (!strncmp(match, htab->table[idx].entry.key, key_len)) { in hmatch_r()
211 *retval = &htab->table[idx].entry; in hmatch_r()
226 ENTRY **retval, struct hsearch_data *htab, int flag, in _compare_and_overwrite_entry() argument
229 if (htab->table[idx].used == hval in _compare_and_overwrite_entry()
230 && strcmp(item.key, htab->table[idx].entry.key) == 0) { in _compare_and_overwrite_entry()
234 if (htab->change_ok != NULL && htab->change_ok( in _compare_and_overwrite_entry()
235 &htab->table[idx].entry, item.data, in _compare_and_overwrite_entry()
245 if (htab->table[idx].entry.callback && in _compare_and_overwrite_entry()
246 htab->table[idx].entry.callback(item.key, in _compare_and_overwrite_entry()
255 free(htab->table[idx].entry.data); in _compare_and_overwrite_entry()
256 htab->table[idx].entry.data = strdup(item.data); in _compare_and_overwrite_entry()
257 if (!htab->table[idx].entry.data) { in _compare_and_overwrite_entry()
264 *retval = &htab->table[idx].entry; in _compare_and_overwrite_entry()
272 struct hsearch_data *htab, int flag) in hsearch_r() argument
293 hval %= htab->size; in hsearch_r()
300 if (htab->table[idx].used) { in hsearch_r()
307 if (htab->table[idx].used == -1 in hsearch_r()
311 ret = _compare_and_overwrite_entry(item, action, retval, htab, in hsearch_r()
320 hval2 = 1 + hval % (htab->size - 2); in hsearch_r()
328 idx = htab->size + idx - hval2; in hsearch_r()
341 htab, flag, hval, idx); in hsearch_r()
345 while (htab->table[idx].used); in hsearch_r()
354 if (htab->filled == htab->size) { in hsearch_r()
367 htab->table[idx].used = hval; in hsearch_r()
368 htab->table[idx].entry.key = strdup(item.key); in hsearch_r()
369 htab->table[idx].entry.data = strdup(item.data); in hsearch_r()
370 if (!htab->table[idx].entry.key || in hsearch_r()
371 !htab->table[idx].entry.data) { in hsearch_r()
377 ++htab->filled; in hsearch_r()
380 env_callback_init(&htab->table[idx].entry); in hsearch_r()
382 env_flags_init(&htab->table[idx].entry); in hsearch_r()
385 if (htab->change_ok != NULL && htab->change_ok( in hsearch_r()
386 &htab->table[idx].entry, item.data, env_op_create, flag)) { in hsearch_r()
389 _hdelete(item.key, htab, &htab->table[idx].entry, idx); in hsearch_r()
396 if (htab->table[idx].entry.callback && in hsearch_r()
397 htab->table[idx].entry.callback(item.key, item.data, in hsearch_r()
401 _hdelete(item.key, htab, &htab->table[idx].entry, idx); in hsearch_r()
408 *retval = &htab->table[idx].entry; in hsearch_r()
428 static void _hdelete(const char *key, struct hsearch_data *htab, ENTRY *ep, in _hdelete() argument
437 htab->table[idx].used = -1; in _hdelete()
439 --htab->filled; in _hdelete()
442 int hdelete_r(const char *key, struct hsearch_data *htab, int flag) in hdelete_r() argument
451 idx = hsearch_r(e, FIND, &ep, htab, 0); in hdelete_r()
458 if (htab->change_ok != NULL && in hdelete_r()
459 htab->change_ok(ep, NULL, env_op_delete, flag)) { in hdelete_r()
467 if (htab->table[idx].entry.callback && in hdelete_r()
468 htab->table[idx].entry.callback(key, NULL, env_op_delete, flag)) { in hdelete_r()
475 _hdelete(key, htab, ep, idx); in hdelete_r()
590 ssize_t hexport_r(struct hsearch_data *htab, const char sep, int flag, in hexport_r() argument
594 ENTRY *list[htab->size]; in hexport_r()
600 if ((resp == NULL) || (htab == NULL)) { in hexport_r()
606 htab, htab->size, htab->filled, (ulong)size); in hexport_r()
612 for (i = 1, n = 0, totlen = 0; i <= htab->size; ++i) { in hexport_r()
614 if (htab->table[i].used > 0) { in hexport_r()
615 ENTRY *ep = &htab->table[i].entry; in hexport_r()
777 int himport_r(struct hsearch_data *htab, in himport_r() argument
785 if (htab == NULL) { in himport_r()
806 debug("Destroy Hash Table: %p table = %p\n", htab, in himport_r()
807 htab->table); in himport_r()
808 if (htab->table) in himport_r()
809 hdestroy_r(htab); in himport_r()
830 if (!htab->table) { in himport_r()
838 if (hcreate_r(nent, htab) == 0) { in himport_r()
892 if (hdelete_r(name, htab, flag) == 0) in himport_r()
923 hsearch_r(e, ENTER, &rv, htab, flag); in himport_r()
929 htab, htab->filled, htab->size, in himport_r()
955 if (hdelete_r(localvars[i], htab, flag) == 0) in himport_r()
973 int hwalk_r(struct hsearch_data *htab, int (*callback)(ENTRY *)) in hwalk_r() argument
978 for (i = 1; i <= htab->size; ++i) { in hwalk_r()
979 if (htab->table[i].used > 0) { in hwalk_r()
980 retval = callback(&htab->table[i].entry); in hwalk_r()