goto cleanup; \
} while (0)
+/* cfg_obj_t magic number */
+#define CFGOBJ_MAGIC ISC_MAGIC('c', 'f', 'g', 'o')
+#define VALID_CFGOBJ(obj) ISC_MAGIC_VALID(obj, CFGOBJ_MAGIC)
+
/* Clean up a configuration object if non-NULL. */
#define CLEANUP_OBJ(obj) \
do { \
- if ((obj) != NULL) \
+ if ((obj) != NULL) { \
cfg_obj_detach(&(obj)); \
+ } \
} while (0)
-/* cfg_obj_t magic number */
-#define CFGOBJ_MAGIC ISC_MAGIC('c', 'f', 'g', 'o')
-
/*
* Forward declarations of static functions.
*/
void
cfg_obj_clone(const cfg_obj_t *source, cfg_obj_t **target) {
- REQUIRE(source != NULL);
+ REQUIRE(VALID_CFGOBJ(source));
REQUIRE(source->type != NULL);
REQUIRE(source->type->rep != NULL);
REQUIRE(source->type->rep->copy != NULL);
}
static void
-copy_map_destroy(char *key, unsigned int type, isc_symvalue_t symval,
- void *arg) {
+copy_map_destroy(char *key ISC_ATTR_UNUSED, unsigned int type ISC_ATTR_UNUSED,
+ isc_symvalue_t symval, void *arg ISC_ATTR_UNUSED) {
cfg_obj_t *obj = symval.as_pointer;
- UNUSED(key);
- UNUSED(type);
- UNUSED(arg);
+ REQUIRE(VALID_CFGOBJ(obj));
cfg_obj_detach(&obj);
}
cfg_obj_t *to = arg;
cfg_obj_t *toelt = NULL;
+ REQUIRE(VALID_CFGOBJ(value.as_pointer));
+
/*
* Only `as_pointer` is used to store the cfg_obj_t object (see
* cfg_map_parsebody)
const cfg_listelt_t *fromelt = cfg_list_first(from);
ISC_LIST_INIT(to->value.list);
+
while (fromelt != NULL) {
cfg_listelt_t *toelt = isc_mem_get(to->mctx, sizeof(*toelt));
static void
copy_tuple(cfg_obj_t *to, const cfg_obj_t *from) {
const cfg_tuplefielddef_t *fields = from->type->of;
- const cfg_tuplefielddef_t *field;
size_t size = 0;
- for (field = fields; field->name != NULL; field++) {
+ fields = from->type->of;
+ for (const cfg_tuplefielddef_t *field = fields; field->name != NULL;
+ field++)
+ {
size++;
}
}
static void
-copy_noop(cfg_obj_t *to, const cfg_obj_t *from) {
- UNUSED(to);
- UNUSED(from);
-}
+copy_noop(cfg_obj_t *to ISC_ATTR_UNUSED,
+ const cfg_obj_t *from ISC_ATTR_UNUSED) {}
/*
* Data representations. These correspond to members of the
void
cfg_print_obj(cfg_printer_t *pctx, const cfg_obj_t *obj) {
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
obj->type->print(pctx, obj);
}
cfg_print(const cfg_obj_t *obj,
void (*f)(void *closure, const char *text, int textlen),
void *closure) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
REQUIRE(f != NULL);
cfg_printx(obj, 0, f, closure);
void *closure) {
cfg_printer_t pctx;
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
REQUIRE(f != NULL);
pctx.f = f;
bool need_space = false;
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
fields = obj->type->of;
free_tuple(cfg_obj_t *obj) {
unsigned int i;
const cfg_tuplefielddef_t *fields = obj->type->of;
- const cfg_tuplefielddef_t *f;
+ const cfg_tuplefielddef_t *f = NULL;
unsigned int nfields = 0;
if (obj->value.tuple == NULL) {
bool
cfg_obj_istuple(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_tuple;
}
const cfg_tuplefielddef_t *fields;
const cfg_tuplefielddef_t *f;
- REQUIRE(tupleobj != NULL && tupleobj->type->rep == &cfg_rep_tuple);
+ REQUIRE(VALID_CFGOBJ(tupleobj));
+ REQUIRE(tupleobj->type->rep == &cfg_rep_tuple);
REQUIRE(name != NULL);
fields = tupleobj->type->of;
* void
*/
isc_result_t
-cfg_parse_void(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
+cfg_parse_void(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
+ cfg_obj_t **ret) {
REQUIRE(pctx != NULL);
REQUIRE(ret != NULL && *ret == NULL);
- UNUSED(type);
-
cfg_obj_create(pctx->mctx, cfg_parser_currentfile(pctx), pctx->line,
&cfg_type_void, ret);
return ISC_R_SUCCESS;
void
cfg_print_void(cfg_printer_t *pctx, const cfg_obj_t *obj) {
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
-
- UNUSED(pctx);
- UNUSED(obj);
+ REQUIRE(VALID_CFGOBJ(obj));
}
void
cfg_doc_void(cfg_printer_t *pctx, const cfg_type_t *type) {
REQUIRE(pctx != NULL);
REQUIRE(type != NULL);
-
- UNUSED(pctx);
- UNUSED(type);
}
bool
cfg_obj_isvoid(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_void;
}
* percentage
*/
isc_result_t
-cfg_parse_percentage(cfg_parser_t *pctx, const cfg_type_t *type,
+cfg_parse_percentage(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
cfg_obj_t **ret) {
char *endp;
isc_result_t result;
REQUIRE(pctx != NULL);
REQUIRE(ret != NULL && *ret == NULL);
- UNUSED(type);
-
CHECK(cfg_gettoken(pctx, 0));
if (pctx->token.type != isc_tokentype_string) {
cfg_parser_error(pctx, CFG_LOG_NEAR, "expected percentage");
int n;
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
n = snprintf(buf, sizeof(buf), "%u%%", obj->value.uint32);
INSIST(n > 0 && (size_t)n < sizeof(buf));
bool
cfg_obj_ispercentage(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_percentage;
}
* Fixed point
*/
isc_result_t
-cfg_parse_fixedpoint(cfg_parser_t *pctx, const cfg_type_t *type,
+cfg_parse_fixedpoint(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
cfg_obj_t **ret) {
isc_result_t result;
cfg_obj_t *obj = NULL;
REQUIRE(pctx != NULL);
REQUIRE(ret != NULL && *ret == NULL);
- UNUSED(type);
-
CHECK(cfg_gettoken(pctx, 0));
if (pctx->token.type != isc_tokentype_string) {
cfg_parser_error(pctx, CFG_LOG_NEAR,
int n;
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
n = snprintf(buf, sizeof(buf), "%u.%02u", obj->value.uint32 / 100,
obj->value.uint32 % 100);
uint32_t
cfg_obj_asfixedpoint(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL && obj->type->rep == &cfg_rep_fixedpoint);
+ REQUIRE(VALID_CFGOBJ(obj));
+ REQUIRE(obj->type->rep == &cfg_rep_fixedpoint);
return obj->value.uint32;
}
bool
cfg_obj_isfixedpoint(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_fixedpoint;
}
* uint32
*/
isc_result_t
-cfg_parse_uint32(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
+cfg_parse_uint32(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
+ cfg_obj_t **ret) {
isc_result_t result;
cfg_obj_t *obj = NULL;
REQUIRE(pctx != NULL);
REQUIRE(ret != NULL && *ret == NULL);
- UNUSED(type);
-
CHECK(cfg_gettoken(pctx, ISC_LEXOPT_NUMBER | ISC_LEXOPT_CNUMBER));
if (pctx->token.type != isc_tokentype_number) {
cfg_parser_error(pctx, CFG_LOG_NEAR, "expected number");
void
cfg_print_uint32(cfg_printer_t *pctx, const cfg_obj_t *obj) {
+ REQUIRE(VALID_CFGOBJ(obj));
cfg_print_rawuint(pctx, obj->value.uint32);
}
bool
cfg_obj_isuint32(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_uint32;
}
uint32_t
cfg_obj_asuint32(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL && obj->type->rep == &cfg_rep_uint32);
+ REQUIRE(VALID_CFGOBJ(obj));
+ REQUIRE(obj->type->rep == &cfg_rep_uint32);
return obj->value.uint32;
}
*/
bool
cfg_obj_isuint64(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_uint64;
}
uint64_t
cfg_obj_asuint64(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL && obj->type->rep == &cfg_rep_uint64);
+ REQUIRE(VALID_CFGOBJ(obj));
+ REQUIRE(obj->type->rep == &cfg_rep_uint64);
return obj->value.uint64;
}
cfg_print_uint64(cfg_printer_t *pctx, const cfg_obj_t *obj) {
char buf[32];
+ REQUIRE(VALID_CFGOBJ(obj));
+
snprintf(buf, sizeof(buf), "%" PRIu64, obj->value.uint64);
cfg_print_cstr(pctx, buf);
}
bool D = false, T = false;
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
duration = obj->value.duration;
isccfg_duration_t duration;
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
duration = obj->value.duration;
bool
cfg_obj_isduration(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_duration;
}
uint32_t
cfg_obj_asduration(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL && obj->type->rep == &cfg_rep_duration);
+ REQUIRE(VALID_CFGOBJ(obj));
+ REQUIRE(obj->type->rep == &cfg_rep_duration);
return isccfg_duration_toseconds(&(obj->value.duration));
}
}
isc_result_t
-cfg_parse_duration(cfg_parser_t *pctx, const cfg_type_t *type,
+cfg_parse_duration(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
cfg_obj_t **ret) {
isc_result_t result;
- UNUSED(type);
-
CHECK(cfg_gettoken(pctx, 0));
if (pctx->token.type != isc_tokentype_string) {
result = ISC_R_UNEXPECTEDTOKEN;
}
isc_result_t
-cfg_parse_duration_or_unlimited(cfg_parser_t *pctx, const cfg_type_t *type,
+cfg_parse_duration_or_unlimited(cfg_parser_t *pctx,
+ const cfg_type_t *type ISC_ATTR_UNUSED,
cfg_obj_t **ret) {
isc_result_t result;
cfg_obj_t *obj = NULL;
isccfg_duration_t duration;
- UNUSED(type);
-
CHECK(cfg_gettoken(pctx, 0));
if (pctx->token.type != isc_tokentype_string) {
result = ISC_R_UNEXPECTEDTOKEN;
}
isc_result_t
-cfg_parse_qstring(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
+cfg_parse_qstring(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
+ cfg_obj_t **ret) {
isc_result_t result;
REQUIRE(pctx != NULL);
REQUIRE(ret != NULL && *ret == NULL);
- UNUSED(type);
-
CHECK(cfg_gettoken(pctx, CFG_LEXOPT_QSTRING));
if (pctx->token.type != isc_tokentype_qstring) {
cfg_parser_error(pctx, CFG_LOG_NEAR, "expected quoted string");
}
static isc_result_t
-parse_ustring(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
+parse_ustring(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
+ cfg_obj_t **ret) {
isc_result_t result;
- UNUSED(type);
-
CHECK(cfg_gettoken(pctx, 0));
if (pctx->token.type != isc_tokentype_string) {
cfg_parser_error(pctx, CFG_LOG_NEAR,
}
isc_result_t
-cfg_parse_astring(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
+cfg_parse_astring(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
+ cfg_obj_t **ret) {
isc_result_t result;
REQUIRE(pctx != NULL);
REQUIRE(ret != NULL && *ret == NULL);
- UNUSED(type);
-
CHECK(cfg_getstringtoken(pctx));
create_string(pctx, TOKEN_STRING(pctx), &cfg_type_qstring, ret);
return ISC_R_SUCCESS;
}
isc_result_t
-cfg_parse_sstring(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
+cfg_parse_sstring(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
+ cfg_obj_t **ret) {
isc_result_t result;
REQUIRE(pctx != NULL);
REQUIRE(ret != NULL && *ret == NULL);
- UNUSED(type);
-
CHECK(cfg_getstringtoken(pctx));
create_string(pctx, TOKEN_STRING(pctx), &cfg_type_sstring, ret);
return ISC_R_SUCCESS;
}
static isc_result_t
-parse_btext(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
+parse_btext(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
+ cfg_obj_t **ret) {
isc_result_t result;
- UNUSED(type);
-
CHECK(cfg_gettoken(pctx, ISC_LEXOPT_BTEXT));
if (pctx->token.type != isc_tokentype_btext) {
cfg_parser_error(pctx, CFG_LOG_NEAR, "expected bracketed text");
}
static void
-doc_btext(cfg_printer_t *pctx, const cfg_type_t *type) {
- UNUSED(type);
-
+doc_btext(cfg_printer_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED) {
cfg_print_cstr(pctx, "{ <unspecified-text> }");
}
static isc_result_t
check_enum(cfg_parser_t *pctx, cfg_obj_t *obj, const char *const *enums) {
- const char *s = obj->value.string.base;
+ const char *s;
+
+ REQUIRE(VALID_CFGOBJ(obj));
+ s = obj->value.string.base;
if (cfg_is_enum(s, enums)) {
return ISC_R_SUCCESS;
}
void
cfg_print_ustring(cfg_printer_t *pctx, const cfg_obj_t *obj) {
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
cfg_print_chars(pctx, obj->value.string.base, obj->value.string.length);
}
static void
print_qstring(cfg_printer_t *pctx, const cfg_obj_t *obj) {
+ REQUIRE(VALID_CFGOBJ(obj));
print_rawqstring(pctx, obj->value.string);
}
static void
print_sstring(cfg_printer_t *pctx, const cfg_obj_t *obj) {
+ REQUIRE(VALID_CFGOBJ(obj));
cfg_print_cstr(pctx, "\"");
if ((pctx->flags & CFG_PRINTER_XKEY) != 0) {
unsigned int len = obj->value.string.length;
bool
cfg_obj_isstring(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_string;
}
const char *
cfg_obj_asstring(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL && obj->type->rep == &cfg_rep_string);
+ REQUIRE(VALID_CFGOBJ(obj));
+ REQUIRE(obj->type->rep == &cfg_rep_string);
return obj->value.string.base;
}
static void
print_geoip(cfg_printer_t *pctx, const cfg_obj_t *obj) {
+ REQUIRE(VALID_CFGOBJ(obj));
if (obj->value.tuple[1]->type->print != cfg_print_void) {
cfg_print_cstr(pctx, " db ");
cfg_print_obj(pctx, obj->value.tuple[1]);
}
static void
-doc_geoip(cfg_printer_t *pctx, const cfg_type_t *type) {
- UNUSED(type);
+doc_geoip(cfg_printer_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED) {
cfg_print_cstr(pctx, "[ db ");
cfg_doc_obj(pctx, &cfg_type_astring);
cfg_print_cstr(pctx, " ]");
static cfg_type_t cfg_type_negated;
static isc_result_t
-parse_addrmatchelt(cfg_parser_t *pctx, const cfg_type_t *type,
+parse_addrmatchelt(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
cfg_obj_t **ret) {
isc_result_t result;
- UNUSED(type);
CHECK(cfg_peektoken(pctx, CFG_LEXOPT_QSTRING));
static void
print_negated(cfg_printer_t *pctx, const cfg_obj_t *obj) {
+ REQUIRE(VALID_CFGOBJ(obj));
cfg_print_cstr(pctx, "!");
cfg_print_tuple(pctx, obj);
}
* Optional bracketed text
*/
static isc_result_t
-parse_optional_btext(cfg_parser_t *pctx, const cfg_type_t *type,
+parse_optional_btext(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
cfg_obj_t **ret) {
isc_result_t result;
- UNUSED(type);
-
CHECK(cfg_peektoken(pctx, ISC_LEXOPT_BTEXT));
if (pctx->token.type == isc_tokentype_btext) {
CHECK(cfg_parse_obj(pctx, &cfg_type_bracketed_text, ret));
}
static void
-doc_optional_btext(cfg_printer_t *pctx, const cfg_type_t *type) {
- UNUSED(type);
-
+doc_optional_btext(cfg_printer_t *pctx,
+ const cfg_type_t *type ISC_ATTR_UNUSED) {
cfg_print_cstr(pctx, "[ { <unspecified-text> } ]");
}
bool
cfg_obj_isboolean(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_boolean;
}
bool
cfg_obj_asboolean(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL && obj->type->rep == &cfg_rep_boolean);
+ REQUIRE(VALID_CFGOBJ(obj));
+ REQUIRE(obj->type->rep == &cfg_rep_boolean);
return obj->value.boolean;
}
isc_result_t
-cfg_parse_boolean(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
+cfg_parse_boolean(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
+ cfg_obj_t **ret) {
isc_result_t result;
bool value;
cfg_obj_t *obj = NULL;
REQUIRE(pctx != NULL);
REQUIRE(ret != NULL && *ret == NULL);
- UNUSED(type);
-
result = cfg_gettoken(pctx, 0);
if (result != ISC_R_SUCCESS) {
return result;
void
cfg_print_boolean(cfg_printer_t *pctx, const cfg_obj_t *obj) {
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
if (obj->value.boolean) {
cfg_print_cstr(pctx, "yes");
static void
create_listelt(cfg_obj_t *list, cfg_listelt_t **eltp) {
- cfg_listelt_t *elt = isc_mem_get(list->mctx, sizeof(*elt));
+ cfg_listelt_t *elt;
+
+ REQUIRE(VALID_CFGOBJ(list));
+ elt = isc_mem_get(list->mctx, sizeof(*elt));
*elt = (cfg_listelt_t){ .link = ISC_LINK_INITIALIZER };
*eltp = elt;
}
static void
free_listelt(cfg_obj_t *list, cfg_listelt_t **eltp) {
cfg_listelt_t *elt = *eltp;
+
*eltp = NULL;
if (elt->obj != NULL) {
cfg_obj_t *value = NULL;
REQUIRE(pctx != NULL);
- REQUIRE(list != NULL);
+ REQUIRE(VALID_CFGOBJ(list));
REQUIRE(elttype != NULL);
REQUIRE(ret != NULL && *ret == NULL);
static void
print_list(cfg_printer_t *pctx, const cfg_obj_t *obj) {
- cfg_list_t *list = UNCONST(&obj->value.list);
+ cfg_list_t *list;
+ REQUIRE(VALID_CFGOBJ(obj));
+
+ list = UNCONST(&obj->value.list);
ISC_LIST_FOREACH(*list, elt, link) {
if ((pctx->flags & CFG_PRINTER_ONELINE) != 0) {
cfg_print_obj(pctx, elt->obj);
void
cfg_print_bracketed_list(cfg_printer_t *pctx, const cfg_obj_t *obj) {
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
print_open(pctx);
print_list(pctx, obj);
cfg_list_t *list = NULL;
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
list = UNCONST(&obj->value.list);
bool
cfg_obj_islist(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_list;
}
const cfg_listelt_t *
cfg_list_first(const cfg_obj_t *obj) {
- REQUIRE(obj == NULL || obj->type->rep == &cfg_rep_list);
+ REQUIRE(obj == NULL ||
+ (VALID_CFGOBJ(obj) && obj->type->rep == &cfg_rep_list));
if (obj == NULL) {
return NULL;
}
void
cfg_list_unlink(cfg_obj_t *list, cfg_listelt_t *elt) {
+ REQUIRE(VALID_CFGOBJ(list));
ISC_LIST_UNLINK(list->value.list, elt, link);
free_listelt(list, &elt);
}
const cfg_clausedef_t *const *clauseset;
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
for (clauseset = obj->value.map.clausesets; *clauseset != NULL;
clauseset++)
void
cfg_print_map(cfg_printer_t *pctx, const cfg_obj_t *obj) {
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
if (obj->value.map.id != NULL) {
cfg_print_obj(pctx, obj->value.map.id);
bool
cfg_obj_ismap(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_map;
}
const cfg_obj_t *
cfg_map_getname(const cfg_obj_t *mapobj) {
- REQUIRE(mapobj != NULL && mapobj->type->rep == &cfg_rep_map);
+ REQUIRE(VALID_CFGOBJ(mapobj));
+ REQUIRE(mapobj->type->rep == &cfg_rep_map);
return mapobj->value.map.id;
}
cfg_map_count(const cfg_obj_t *mapobj) {
const cfg_map_t *map;
- REQUIRE(mapobj != NULL && mapobj->type->rep == &cfg_rep_map);
+ REQUIRE(VALID_CFGOBJ(mapobj));
+ REQUIRE(mapobj->type->rep == &cfg_rep_map);
map = &mapobj->value.map;
return isc_symtab_count(map->symtab);
/* Parse an arbitrary token, storing its raw text representation. */
static isc_result_t
-parse_token(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
+parse_token(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
+ cfg_obj_t **ret) {
cfg_obj_t *obj = NULL;
isc_result_t result;
isc_region_t r;
- UNUSED(type);
-
cfg_obj_create(pctx->mctx, cfg_parser_currentfile(pctx), pctx->line,
&cfg_type_token, &obj);
CHECK(cfg_gettoken(pctx, CFG_LEXOPT_QSTRING));
/* netprefix */
isc_result_t
-cfg_parse_netprefix(cfg_parser_t *pctx, const cfg_type_t *type,
+cfg_parse_netprefix(cfg_parser_t *pctx, const cfg_type_t *type ISC_ATTR_UNUSED,
cfg_obj_t **ret) {
cfg_obj_t *obj = NULL;
isc_result_t result;
REQUIRE(pctx != NULL);
REQUIRE(ret != NULL && *ret == NULL);
- UNUSED(type);
-
result = cfg_parse_rawaddr(
pctx, CFG_ADDR_V4OK | CFG_ADDR_V4PREFIXOK | CFG_ADDR_V6OK,
&netaddr);
static void
print_netprefix(cfg_printer_t *pctx, const cfg_obj_t *obj) {
- const cfg_netprefix_t *p = &obj->value.netprefix;
+ const cfg_netprefix_t *p;
+
+ REQUIRE(VALID_CFGOBJ(obj));
+ p = &obj->value.netprefix;
cfg_print_rawaddr(pctx, &p->address);
cfg_print_cstr(pctx, "/");
cfg_print_rawuint(pctx, p->prefixlen);
bool
cfg_obj_isnetprefix(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_netprefix;
}
void
cfg_obj_asnetprefix(const cfg_obj_t *obj, isc_netaddr_t *netaddr,
unsigned int *prefixlen) {
- REQUIRE(obj != NULL && obj->type->rep == &cfg_rep_netprefix);
+ REQUIRE(VALID_CFGOBJ(obj));
+ REQUIRE(obj->type->rep == &cfg_rep_netprefix);
REQUIRE(netaddr != NULL);
REQUIRE(prefixlen != NULL);
char buf[ISC_NETADDR_FORMATSIZE];
REQUIRE(pctx != NULL);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
isc_netaddr_fromsockaddr(&netaddr, &obj->value.sockaddr);
isc_netaddr_format(&netaddr, buf, sizeof(buf));
bool
cfg_obj_issockaddr(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_sockaddr;
}
bool
cfg_obj_issockaddrtls(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->type->rep == &cfg_rep_sockaddrtls;
}
const isc_sockaddr_t *
cfg_obj_assockaddr(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
REQUIRE(obj->type->rep == &cfg_rep_sockaddr ||
obj->type->rep == &cfg_rep_sockaddrtls);
return &obj->value.sockaddr;
const char *
cfg_obj_getsockaddrtls(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL && obj->type->rep == &cfg_rep_sockaddrtls);
+ REQUIRE(VALID_CFGOBJ(obj));
+ REQUIRE(obj->type->rep == &cfg_rep_sockaddrtls);
return obj->value.sockaddrtls.tls.base;
}
va_list ap;
char msgbuf[2048];
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
REQUIRE(fmt != NULL);
if (!isc_log_wouldlog(level)) {
const char *
cfg_obj_file(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return cfg_obj_asstring(obj->file);
}
unsigned int
cfg_obj_line(const cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
return obj->line;
}
}
static void
-map_symtabitem_destroy(char *key, unsigned int type, isc_symvalue_t symval,
- void *userarg) {
+map_symtabitem_destroy(char *key ISC_ATTR_UNUSED,
+ unsigned int type ISC_ATTR_UNUSED, isc_symvalue_t symval,
+ void *userarg ISC_ATTR_UNUSED) {
cfg_obj_t *obj = symval.as_pointer;
- UNUSED(key);
- UNUSED(type);
- UNUSED(userarg);
+ REQUIRE(VALID_CFGOBJ(obj));
cfg_obj_detach(&obj);
}
bool
cfg_obj_istype(const cfg_obj_t *obj, const cfg_type_t *type) {
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
REQUIRE(type != NULL);
return obj->type == type;
* Destroy 'obj'.
*/
static void
-cfg__obj_destroy(cfg_obj_t *obj) {
- REQUIRE(obj != NULL);
- REQUIRE(obj->magic == CFGOBJ_MAGIC);
-
- obj->magic = 0;
-
- if (obj->file != NULL) {
- cfg_obj_detach(&obj->file);
- }
+destroy_cfgobj(cfg_obj_t *obj) {
+ REQUIRE(VALID_CFGOBJ(obj));
+ CLEANUP_OBJ(obj->file);
obj->type->rep->free(obj);
+ obj->magic = 0;
isc_refcount_destroy(&obj->references);
isc_mem_putanddetach(&obj->mctx, obj, sizeof(cfg_obj_t));
}
-ISC_REFCOUNT_IMPL(cfg_obj, cfg__obj_destroy);
+ISC_REFCOUNT_IMPL(cfg_obj, destroy_cfgobj);
static void
-free_noop(cfg_obj_t *obj) {
- UNUSED(obj);
-}
+free_noop(cfg_obj_t *obj ISC_ATTR_UNUSED) {}
void
cfg_doc_obj(cfg_printer_t *pctx, const cfg_type_t *type) {
static const cfg_clausedef_t *
map_lookup_clause(const cfg_obj_t *mapobj, const char *clausename) {
- const cfg_map_t *map = &mapobj->value.map;
+ const cfg_map_t *map;
const cfg_clausedef_t *const *clauseset = NULL;
const cfg_clausedef_t *clause = NULL;
+ map = &mapobj->value.map;
for (clauseset = map->clausesets; *clauseset != NULL; clauseset++) {
for (clause = *clauseset; clause->name != NULL; clause++) {
if (strcasecmp(clause->name, clausename) == 0) {
isc_symvalue_t symval;
map = &mapobj->value.map;
-
result = isc_symtab_lookup(map->symtab, clause->name, SYMTAB_DUMMY_TYPE,
&symval);
if (result == ISC_R_NOTFOUND) {
cfg_map_add(cfg_obj_t *mapobj, cfg_obj_t *obj, const char *clausename) {
const cfg_clausedef_t *clause;
- REQUIRE(mapobj != NULL && mapobj->type->rep == &cfg_rep_map);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
+ REQUIRE(VALID_CFGOBJ(mapobj));
+ REQUIRE(mapobj->type->rep == &cfg_rep_map);
REQUIRE(clausename != NULL);
clause = map_lookup_clause(mapobj, clausename);
isc_result_t result = ISC_R_SUCCESS;
cfg_obj_t *clone = NULL;
- REQUIRE(map != NULL && map->type->rep == &cfg_rep_map);
- REQUIRE(obj != NULL);
+ REQUIRE(VALID_CFGOBJ(obj));
+ REQUIRE(VALID_CFGOBJ(map));
+ REQUIRE(map->type->rep == &cfg_rep_map);
REQUIRE(clause != NULL && clause->name != NULL);
/*
void *callback_data) {
isc_result_t result = ISC_R_SUCCESS;
- REQUIRE(config != NULL);
+ REQUIRE(VALID_CFGOBJ(config));
REQUIRE(callback != NULL);
CFG_LIST_FOREACH(list, element) {