/usr/share/cagefs-skeleton/usr/include/bind9/isc
/* * Copyright (C) Internet Systems Consortium, Inc. ("ISC") * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, you can obtain one at https://mozilla.org/MPL/2.0/. * * See the COPYRIGHT file distributed with this work for additional * information regarding copyright ownership. */ #ifndef ISC_SYMTAB_H #define ISC_SYMTAB_H 1 /***** ***** Module Info *****/ /*! \file isc/symtab.h * \brief Provides a simple memory-based symbol table. * * Keys are C strings, and key comparisons are case-insensitive. A type may * be specified when looking up, defining, or undefining. A type value of * 0 means "match any type"; any other value will only match the given * type. * * It's possible that a client will attempt to define a <key, type, value> * tuple when a tuple with the given key and type already exists in the table. * What to do in this case is specified by the client. Possible policies are: * *\li #isc_symexists_reject Disallow the define, returning #ISC_R_EXISTS *\li #isc_symexists_replace Replace the old value with the new. The * undefine action (if provided) will be called * with the old <key, type, value> tuple. *\li #isc_symexists_add Add the new tuple, leaving the old tuple in * the table. Subsequent lookups will retrieve * the most-recently-defined tuple. * * A lookup of a key using type 0 will return the most-recently defined * symbol with that key. An undefine of a key using type 0 will undefine the * most-recently defined symbol with that key. Trying to define a key with * type 0 is illegal. * * The symbol table library does not make a copy the key field, so the * caller must ensure that any key it passes to isc_symtab_define() will not * change until it calls isc_symtab_undefine() or isc_symtab_destroy(). * * A user-specified action will be called (if provided) when a symbol is * undefined. It can be used to free memory associated with keys and/or * values. * * A symbol table is implemented as a hash table of lists; the size of the * hash table is set by the 'size' parameter to isc_symtbl_create(). When * the number of entries in the symbol table reaches three quarters of this * value, the hash table is reallocated with size doubled, in order to * optimize lookup performance. This has a negative effect on insertion * performance, which can be mitigated by sizing the table appropriately * when creating it. * * \li MP: * The callers of this module must ensure any required synchronization. * * \li Reliability: * No anticipated impact. * * \li Resources: * TBS * * \li Security: * No anticipated impact. * * \li Standards: * None. */ /*** *** Imports. ***/ #include <stdbool.h> #include <isc/lang.h> #include <isc/types.h> /* *** Symbol Tables. ***/ /*% Symbol table value. */ typedef union isc_symvalue { void *as_pointer; const void *as_cpointer; int as_integer; unsigned int as_uinteger; } isc_symvalue_t; typedef void (*isc_symtabaction_t)(char *key, unsigned int type, isc_symvalue_t value, void *userarg); /*% Symbol table exists. */ typedef enum { isc_symexists_reject = 0, /*%< Disallow the define */ isc_symexists_replace = 1, /*%< Replace the old value with the new */ isc_symexists_add = 2 /*%< Add the new tuple */ } isc_symexists_t; ISC_LANG_BEGINDECLS /*% Create a symbol table. */ isc_result_t isc_symtab_create(isc_mem_t *mctx, unsigned int size, isc_symtabaction_t undefine_action, void *undefine_arg, bool case_sensitive, isc_symtab_t **symtabp); /*% Destroy a symbol table. */ void isc_symtab_destroy(isc_symtab_t **symtabp); /*% Lookup a symbol table. */ isc_result_t isc_symtab_lookup(isc_symtab_t *symtab, const char *key, unsigned int type, isc_symvalue_t *value); /*% Define a symbol table. */ isc_result_t isc_symtab_define(isc_symtab_t *symtab, const char *key, unsigned int type, isc_symvalue_t value, isc_symexists_t exists_policy); /*% Undefine a symbol table. */ isc_result_t isc_symtab_undefine(isc_symtab_t *symtab, const char *key, unsigned int type); /*% Return the number of items in a symbol table. */ unsigned int isc_symtab_count(isc_symtab_t *symtab); ISC_LANG_ENDDECLS #endif /* ISC_SYMTAB_H */
.
Edit
..
Edit
aes.h
Edit
align.h
Edit
app.h
Edit
assertions.h
Edit
astack.h
Edit
atomic.h
Edit
backtrace.h
Edit
barrier.h
Edit
base32.h
Edit
base64.h
Edit
bind9.h
Edit
buffer.h
Edit
bufferlist.h
Edit
cmocka.h
Edit
commandline.h
Edit
condition.h
Edit
counter.h
Edit
crc64.h
Edit
deprecated.h
Edit
dir.h
Edit
endian.h
Edit
errno.h
Edit
errno2result.h
Edit
error.h
Edit
event.h
Edit
eventclass.h
Edit
file.h
Edit
formatcheck.h
Edit
fsaccess.h
Edit
fuzz.h
Edit
hash.h
Edit
heap.h
Edit
hex.h
Edit
hmac.h
Edit
hp.h
Edit
ht.h
Edit
httpd.h
Edit
interfaceiter.h
Edit
iterated_hash.h
Edit
lang.h
Edit
lex.h
Edit
lfsr.h
Edit
lib.h
Edit
likely.h
Edit
list.h
Edit
log.h
Edit
magic.h
Edit
managers.h
Edit
md.h
Edit
mem.h
Edit
meminfo.h
Edit
mutex.h
Edit
mutexatomic.h
Edit
mutexblock.h
Edit
net.h
Edit
netaddr.h
Edit
netdb.h
Edit
netmgr.h
Edit
netscope.h
Edit
nonce.h
Edit
offset.h
Edit
once.h
Edit
os.h
Edit
parseint.h
Edit
platform.h
Edit
pool.h
Edit
portset.h
Edit
print.h
Edit
queue.h
Edit
quota.h
Edit
radix.h
Edit
random.h
Edit
ratelimiter.h
Edit
refcount.h
Edit
regex.h
Edit
region.h
Edit
resource.h
Edit
result.h
Edit
resultclass.h
Edit
rwlock.h
Edit
safe.h
Edit
serial.h
Edit
siphash.h
Edit
sockaddr.h
Edit
socket.h
Edit
stat.h
Edit
stats.h
Edit
stdatomic.h
Edit
stdio.h
Edit
stdtime.h
Edit
strerr.h
Edit
string.h
Edit
symtab.h
Edit
syslog.h
Edit
task.h
Edit
taskpool.h
Edit
thread.h
Edit
time.h
Edit
timer.h
Edit
tm.h
Edit
types.h
Edit
url.h
Edit
utf8.h
Edit
util.h
Edit
version.h
Edit