Lines Matching refs:htab

68 static void _hdelete(const char *key, struct hsearch_data *htab, ENTRY *ep,
102 int hcreate_r(size_t nel, struct hsearch_data *htab) in hcreate_r() argument
105 if (htab == NULL) { in hcreate_r()
111 if (htab->table != NULL) in hcreate_r()
119 htab->size = nel; in hcreate_r()
120 htab->filled = 0; in hcreate_r()
123 htab->table = (_ENTRY *) calloc(htab->size + 1, sizeof(_ENTRY)); in hcreate_r()
124 if (htab->table == NULL) in hcreate_r()
141 void hdestroy_r(struct hsearch_data *htab) in hdestroy_r() argument
146 if (htab == NULL) { in hdestroy_r()
152 for (i = 1; i <= htab->size; ++i) { in hdestroy_r()
153 if (htab->table[i].used > 0) { in hdestroy_r()
154 ENTRY *ep = &htab->table[i].entry; in hdestroy_r()
160 free(htab->table); in hdestroy_r()
163 htab->table = NULL; in hdestroy_r()
204 struct hsearch_data *htab) in hmatch_r() argument
209 for (idx = last_idx + 1; idx < htab->size; ++idx) { in hmatch_r()
210 if (htab->table[idx].used <= 0) in hmatch_r()
212 if (!strncmp(match, htab->table[idx].entry.key, key_len)) { in hmatch_r()
213 *retval = &htab->table[idx].entry; in hmatch_r()
228 ENTRY **retval, struct hsearch_data *htab, int flag, in _compare_and_overwrite_entry() argument
231 if (htab->table[idx].used == hval in _compare_and_overwrite_entry()
232 && strcmp(item.key, htab->table[idx].entry.key) == 0) { in _compare_and_overwrite_entry()
236 if (htab->change_ok != NULL && htab->change_ok( in _compare_and_overwrite_entry()
237 &htab->table[idx].entry, item.data, in _compare_and_overwrite_entry()
247 if (htab->table[idx].entry.callback && in _compare_and_overwrite_entry()
248 htab->table[idx].entry.callback(item.key, in _compare_and_overwrite_entry()
257 free(htab->table[idx].entry.data); in _compare_and_overwrite_entry()
258 htab->table[idx].entry.data = strdup(item.data); in _compare_and_overwrite_entry()
259 if (!htab->table[idx].entry.data) { in _compare_and_overwrite_entry()
266 *retval = &htab->table[idx].entry; in _compare_and_overwrite_entry()
274 struct hsearch_data *htab, int flag) in hsearch_r() argument
295 hval %= htab->size; in hsearch_r()
302 if (htab->table[idx].used) { in hsearch_r()
309 if (htab->table[idx].used == USED_DELETED in hsearch_r()
313 ret = _compare_and_overwrite_entry(item, action, retval, htab, in hsearch_r()
322 hval2 = 1 + hval % (htab->size - 2); in hsearch_r()
330 idx = htab->size + idx - hval2; in hsearch_r()
341 if (htab->table[idx].used == USED_DELETED in hsearch_r()
347 htab, flag, hval, idx); in hsearch_r()
351 while (htab->table[idx].used != USED_FREE); in hsearch_r()
360 if (htab->filled == htab->size) { in hsearch_r()
373 htab->table[idx].used = hval; in hsearch_r()
374 htab->table[idx].entry.key = strdup(item.key); in hsearch_r()
375 htab->table[idx].entry.data = strdup(item.data); in hsearch_r()
376 if (!htab->table[idx].entry.key || in hsearch_r()
377 !htab->table[idx].entry.data) { in hsearch_r()
383 ++htab->filled; in hsearch_r()
386 env_callback_init(&htab->table[idx].entry); in hsearch_r()
388 env_flags_init(&htab->table[idx].entry); in hsearch_r()
391 if (htab->change_ok != NULL && htab->change_ok( in hsearch_r()
392 &htab->table[idx].entry, item.data, env_op_create, flag)) { in hsearch_r()
395 _hdelete(item.key, htab, &htab->table[idx].entry, idx); in hsearch_r()
402 if (htab->table[idx].entry.callback && in hsearch_r()
403 htab->table[idx].entry.callback(item.key, item.data, in hsearch_r()
407 _hdelete(item.key, htab, &htab->table[idx].entry, idx); in hsearch_r()
414 *retval = &htab->table[idx].entry; in hsearch_r()
434 static void _hdelete(const char *key, struct hsearch_data *htab, ENTRY *ep, in _hdelete() argument
443 htab->table[idx].used = USED_DELETED; in _hdelete()
445 --htab->filled; in _hdelete()
448 int hdelete_r(const char *key, struct hsearch_data *htab, int flag) in hdelete_r() argument
457 idx = hsearch_r(e, FIND, &ep, htab, 0); in hdelete_r()
464 if (htab->change_ok != NULL && in hdelete_r()
465 htab->change_ok(ep, NULL, env_op_delete, flag)) { in hdelete_r()
473 if (htab->table[idx].entry.callback && in hdelete_r()
474 htab->table[idx].entry.callback(key, NULL, env_op_delete, flag)) { in hdelete_r()
481 _hdelete(key, htab, ep, idx); in hdelete_r()
595 ssize_t hexport_r(struct hsearch_data *htab, const char sep, int flag, in hexport_r() argument
599 ENTRY *list[htab->size]; in hexport_r()
605 if ((resp == NULL) || (htab == NULL)) { in hexport_r()
611 htab, htab->size, htab->filled, (ulong)size); in hexport_r()
617 for (i = 1, n = 0, totlen = 0; i <= htab->size; ++i) { in hexport_r()
619 if (htab->table[i].used > 0) { in hexport_r()
620 ENTRY *ep = &htab->table[i].entry; in hexport_r()
785 int himport_r(struct hsearch_data *htab, in himport_r() argument
794 if (htab == NULL) { in himport_r()
815 debug("Destroy Hash Table: %p table = %p\n", htab, in himport_r()
816 htab->table); in himport_r()
817 if (htab->table) in himport_r()
818 hdestroy_r(htab); in himport_r()
839 if (!htab->table) { in himport_r()
847 if (hcreate_r(nent, htab) == 0) { in himport_r()
901 if (hdelete_r(name, htab, flag) == 0) in himport_r()
932 hsearch_r(e, ENTER, &rv, htab, flag); in himport_r()
938 htab, htab->filled, htab->size, in himport_r()
960 if (hdelete_r(localvars[i], htab, flag) == 0) in himport_r()
979 int hwalk_r(struct hsearch_data *htab, int (*callback)(ENTRY *)) in hwalk_r() argument
984 for (i = 1; i <= htab->size; ++i) { in hwalk_r()
985 if (htab->table[i].used > 0) { in hwalk_r()
986 retval = callback(&htab->table[i].entry); in hwalk_r()