mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-25 15:10:48 +01:00
Change CONFIG_CHECK() macro to not need a config_format_t
We'll want it to check all the subsidiary structures of the options object.
This commit is contained in:
parent
627ab9dba3
commit
7abd43ac5f
2 changed files with 28 additions and 25 deletions
|
@ -200,6 +200,23 @@ config_mgr_list_deprecated_vars(const config_mgr_t *mgr)
|
|||
return result;
|
||||
}
|
||||
|
||||
/** Assert that the magic fields in <b>options</b> and its subsidiary
|
||||
* objects are all okay. */
|
||||
static void
|
||||
config_mgr_assert_magic_ok(const config_mgr_t *mgr,
|
||||
const void *options)
|
||||
{
|
||||
tor_assert(mgr);
|
||||
tor_assert(options);
|
||||
struct_check_magic(options, &mgr->toplevel->magic);
|
||||
}
|
||||
|
||||
/** Macro: assert that <b>cfg</b> has the right magic field for
|
||||
* <b>mgr</b>. */
|
||||
#define CONFIG_CHECK(mgr, cfg) STMT_BEGIN \
|
||||
config_mgr_assert_magic_ok((mgr), (cfg)); \
|
||||
STMT_END
|
||||
|
||||
/** Allocate an empty configuration object of a given format type. */
|
||||
void *
|
||||
config_new(const config_mgr_t *mgr)
|
||||
|
@ -207,7 +224,7 @@ config_new(const config_mgr_t *mgr)
|
|||
const config_format_t *fmt = mgr->toplevel;
|
||||
void *opts = tor_malloc_zero(fmt->size);
|
||||
struct_set_magic(opts, &fmt->magic);
|
||||
CONFIG_CHECK(fmt, opts);
|
||||
CONFIG_CHECK(mgr, opts);
|
||||
return opts;
|
||||
}
|
||||
|
||||
|
@ -367,9 +384,8 @@ config_assign_value(const config_mgr_t *mgr, void *options,
|
|||
config_line_t *c, char **msg)
|
||||
{
|
||||
const managed_var_t *var;
|
||||
const config_format_t *fmt = mgr->toplevel;
|
||||
|
||||
CONFIG_CHECK(fmt, options);
|
||||
CONFIG_CHECK(mgr, options);
|
||||
|
||||
var = config_mgr_find_var(mgr, c->key, true, NULL);
|
||||
tor_assert(var);
|
||||
|
@ -417,17 +433,17 @@ config_assign_line(const config_mgr_t *mgr, void *options,
|
|||
config_line_t *c, unsigned flags,
|
||||
bitarray_t *options_seen, char **msg)
|
||||
{
|
||||
const config_format_t *fmt = mgr->toplevel;
|
||||
const unsigned use_defaults = flags & CAL_USE_DEFAULTS;
|
||||
const unsigned clear_first = flags & CAL_CLEAR_FIRST;
|
||||
const unsigned warn_deprecations = flags & CAL_WARN_DEPRECATIONS;
|
||||
const managed_var_t *mvar;
|
||||
|
||||
CONFIG_CHECK(fmt, options);
|
||||
CONFIG_CHECK(mgr, options);
|
||||
|
||||
int var_index = -1;
|
||||
mvar = config_mgr_find_var(mgr, c->key, true, &var_index);
|
||||
if (!mvar) {
|
||||
const config_format_t *fmt = mgr->toplevel;
|
||||
if (fmt->extra) {
|
||||
void *lvalue = STRUCT_VAR_P(options, fmt->extra->offset);
|
||||
log_info(LD_CONFIG,
|
||||
|
@ -497,10 +513,9 @@ STATIC void
|
|||
config_reset_line(const config_mgr_t *mgr, void *options,
|
||||
const char *key, int use_defaults)
|
||||
{
|
||||
const config_format_t *fmt = mgr->toplevel;
|
||||
const managed_var_t *var;
|
||||
|
||||
CONFIG_CHECK(fmt, options);
|
||||
CONFIG_CHECK(mgr, options);
|
||||
|
||||
var = config_mgr_find_var(mgr, key, true, NULL);
|
||||
if (!var)
|
||||
|
@ -545,11 +560,10 @@ config_get_assigned_option(const config_mgr_t *mgr, const void *options,
|
|||
{
|
||||
const managed_var_t *var;
|
||||
config_line_t *result;
|
||||
const config_format_t *fmt = mgr->toplevel;
|
||||
|
||||
tor_assert(options && key);
|
||||
|
||||
CONFIG_CHECK(fmt, options);
|
||||
CONFIG_CHECK(mgr, options);
|
||||
|
||||
var = config_mgr_find_var(mgr, key, true, NULL);
|
||||
if (!var) {
|
||||
|
@ -635,12 +649,11 @@ config_assign(const config_mgr_t *mgr, void *options, config_line_t *list,
|
|||
{
|
||||
config_line_t *p;
|
||||
bitarray_t *options_seen;
|
||||
const config_format_t *fmt = mgr->toplevel;
|
||||
const int n_options = config_count_options(mgr);
|
||||
const unsigned clear_first = config_assign_flags & CAL_CLEAR_FIRST;
|
||||
const unsigned use_defaults = config_assign_flags & CAL_USE_DEFAULTS;
|
||||
|
||||
CONFIG_CHECK(fmt, options);
|
||||
CONFIG_CHECK(mgr, options);
|
||||
|
||||
/* pass 1: normalize keys */
|
||||
for (p = list; p; p = p->next) {
|
||||
|
@ -695,10 +708,9 @@ static void
|
|||
config_reset(const config_mgr_t *mgr, void *options,
|
||||
const managed_var_t *var, int use_defaults)
|
||||
{
|
||||
const config_format_t *fmt = mgr->toplevel;
|
||||
config_line_t *c;
|
||||
char *msg = NULL;
|
||||
CONFIG_CHECK(fmt, options);
|
||||
CONFIG_CHECK(mgr, options);
|
||||
config_clear(mgr, options, var); /* clear it first */
|
||||
|
||||
if (!use_defaults)
|
||||
|
@ -749,9 +761,8 @@ config_is_same(const config_mgr_t *mgr,
|
|||
const void *o1, const void *o2,
|
||||
const char *name)
|
||||
{
|
||||
const config_format_t *fmt = mgr->toplevel;
|
||||
CONFIG_CHECK(fmt, o1);
|
||||
CONFIG_CHECK(fmt, o2);
|
||||
CONFIG_CHECK(mgr, o1);
|
||||
CONFIG_CHECK(mgr, o2);
|
||||
|
||||
const managed_var_t *var = config_mgr_find_var(mgr, name, true, NULL);
|
||||
if (!var) {
|
||||
|
@ -833,8 +844,7 @@ config_dup(const config_mgr_t *mgr, const void *old)
|
|||
void
|
||||
config_init(const config_mgr_t *mgr, void *options)
|
||||
{
|
||||
const config_format_t *fmt = mgr->toplevel;
|
||||
CONFIG_CHECK(fmt, options);
|
||||
CONFIG_CHECK(mgr, options);
|
||||
|
||||
SMARTLIST_FOREACH_BEGIN(mgr->all_vars, const managed_var_t *, mv) {
|
||||
if (!mv->cvar->initvalue)
|
||||
|
|
|
@ -78,13 +78,6 @@ void config_mgr_free_(config_mgr_t *mgr);
|
|||
struct smartlist_t *config_mgr_list_vars(const config_mgr_t *mgr);
|
||||
struct smartlist_t *config_mgr_list_deprecated_vars(const config_mgr_t *mgr);
|
||||
|
||||
/** Macro: assert that <b>cfg</b> has the right magic field for format
|
||||
* <b>fmt</b>. */
|
||||
#define CONFIG_CHECK(fmt, cfg) STMT_BEGIN \
|
||||
tor_assert(fmt); \
|
||||
struct_check_magic((cfg), &fmt->magic); \
|
||||
STMT_END
|
||||
|
||||
#define CAL_USE_DEFAULTS (1u<<0)
|
||||
#define CAL_CLEAR_FIRST (1u<<1)
|
||||
#define CAL_WARN_DEPRECATIONS (1u<<2)
|
||||
|
|
Loading…
Add table
Reference in a new issue