commit 7abd43ac5f1e18e6a1c6bb2de95f39f22392f0c8
Author: Nick Mathewson <nickm(a)torproject.org>
Date: Mon Jul 22 16:28:34 2019 -0400
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.
---
src/app/config/confparse.c | 46 ++++++++++++++++++++++++++++------------------
src/app/config/confparse.h | 7 -------
2 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/src/app/config/confparse.c b/src/app/config/confparse.c
index 0f0950dd8..9d4226307 100644
--- a/src/app/config/confparse.c
+++ b/src/app/config/confparse.c
@@ -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)
diff --git a/src/app/config/confparse.h b/src/app/config/confparse.h
index 105103503..edc7fa377 100644
--- a/src/app/config/confparse.h
+++ b/src/app/config/confparse.h
@@ -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)