Lines Matching defs:symtab
1 /* $NetBSD: symtab.c,v 1.9 2025/01/26 16:25:44 christos Exp $ */
43 #include <isccc/symtab.h>
72 isccc_symtab_t *symtab;
78 symtab = malloc(sizeof(*symtab));
79 if (symtab == NULL) {
82 symtab->table = calloc(size, sizeof(eltlist_t));
83 if (symtab->table == NULL) {
84 free(symtab);
88 ISC_LIST_INIT(symtab->table[i]);
90 symtab->size = size;
91 symtab->undefine_action = undefine_action;
92 symtab->undefine_arg = undefine_arg;
93 symtab->case_sensitive = case_sensitive;
94 symtab->magic = SYMTAB_MAGIC;
96 *symtabp = symtab;
102 free_elt(isccc_symtab_t *symtab, unsigned int bucket, elt_t *elt) {
103 ISC_LIST_UNLINK(symtab->table[bucket], elt, link);
104 if (symtab->undefine_action != NULL) {
105 (symtab->undefine_action)(elt->key, elt->type, elt->value,
106 symtab->undefine_arg);
113 isccc_symtab_t *symtab;
118 symtab = *symtabp;
120 REQUIRE(VALID_SYMTAB(symtab));
122 for (i = 0; i < symtab->size; i++) {
123 for (elt = ISC_LIST_HEAD(symtab->table[i]); elt != NULL;
127 free_elt(symtab, i, elt);
130 free(symtab->table);
131 symtab->magic = 0;
132 free(symtab);
189 isccc_symtab_lookup(isccc_symtab_t *symtab, const char *key, unsigned int type,
194 REQUIRE(VALID_SYMTAB(symtab));
197 FIND(symtab, key, type, bucket, elt);
209 isccc_symtab_define(isccc_symtab_t *symtab, char *key, unsigned int type,
214 REQUIRE(VALID_SYMTAB(symtab));
218 FIND(symtab, key, type, bucket, elt);
225 ISC_LIST_UNLINK(symtab->table[bucket], elt, link);
226 if (symtab->undefine_action != NULL) {
227 (symtab->undefine_action)(elt->key, elt->type,
229 symtab->undefine_arg);
246 ISC_LIST_PREPEND(symtab->table[bucket], elt, link);
252 isccc_symtab_undefine(isccc_symtab_t *symtab, const char *key,
257 REQUIRE(VALID_SYMTAB(symtab));
260 FIND(symtab, key, type, bucket, elt);
266 free_elt(symtab, bucket, elt);
272 isccc_symtab_foreach(isccc_symtab_t *symtab, isccc_symtabforeachaction_t action,
277 REQUIRE(VALID_SYMTAB(symtab));
280 for (i = 0; i < symtab->size; i++) {
281 for (elt = ISC_LIST_HEAD(symtab->table[i]); elt != NULL;
286 free_elt(symtab, i, elt);