[tor-commits] [tor/master] Stop using "config_suite_offset=-1" to indicate "no config suite."

nickm at torproject.org nickm at torproject.org
Thu Nov 7 13:59:49 UTC 2019


commit 0f0a9bdf332002bb0542dae6bb00e922af5dcf63
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Nov 5 10:18:47 2019 -0500

    Stop using "config_suite_offset=-1" to indicate "no config suite."
    
    Instead, create a separate "has_config_suite" boolean, so that only
    top-level formats with config_suites need to declare an offset at
    all.
---
 src/app/config/config.c                   |  1 +
 src/app/config/statefile.c                |  1 +
 src/feature/dirauth/shared_random_state.c |  1 -
 src/lib/conf/conftypes.h                  | 10 ++++++++--
 src/lib/confmgt/confmgt.c                 |  9 +++++++--
 src/lib/crypt_ops/crypto_init.c           |  1 -
 src/test/test_confmgr.c                   |  3 +--
 src/test/test_confparse.c                 |  2 --
 8 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/app/config/config.c b/src/app/config/config.c
index 480d225e9..c121775c0 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -880,6 +880,7 @@ static const config_format_t options_format = {
   .legacy_validate_fn = options_validate_cb,
   .check_transition_fn = options_check_transition_cb,
   .clear_fn = options_clear_cb,
+  .has_config_suite = true,
   .config_suite_offset = offsetof(or_options_t, subconfigs_),
 };
 
diff --git a/src/app/config/statefile.c b/src/app/config/statefile.c
index 5fdb15ace..3e793ff40 100644
--- a/src/app/config/statefile.c
+++ b/src/app/config/statefile.c
@@ -169,6 +169,7 @@ static const config_format_t state_format = {
   .vars = state_vars_,
   .legacy_validate_fn = or_state_validate_cb,
   .extra = &state_extra_var,
+  .has_config_suite = true,
   .config_suite_offset = offsetof(or_state_t, substates_),
 };
 
diff --git a/src/feature/dirauth/shared_random_state.c b/src/feature/dirauth/shared_random_state.c
index 759b3b810..bf4302f16 100644
--- a/src/feature/dirauth/shared_random_state.c
+++ b/src/feature/dirauth/shared_random_state.c
@@ -92,7 +92,6 @@ static const config_format_t state_format = {
   },
   .vars = state_vars,
   .extra = &state_extra_var,
-  .config_suite_offset = -1,
 };
 
 /** Global configuration manager for the shared-random state file */
diff --git a/src/lib/conf/conftypes.h b/src/lib/conf/conftypes.h
index d4e2ea218..dfe51cfba 100644
--- a/src/lib/conf/conftypes.h
+++ b/src/lib/conf/conftypes.h
@@ -335,8 +335,14 @@ typedef struct config_format_t {
   /** If present, extra denotes a LINELIST variable for unrecognized
    * lines.  Otherwise, unrecognized lines are an error. */
   const struct_member_t *extra;
-  /** The position of a config_suite_t pointer within the toplevel object,
-   * or -1 if there is no such pointer. */
+  /**
+   * If true, this format describes a top-level configuration, with
+   * a suite containing multiple sub-configuration objects.
+   */
+  bool has_config_suite;
+  /** The position of a config_suite_t pointer within the toplevel object.
+   * Ignored unless have_config_suite is true.
+   */
   ptrdiff_t config_suite_offset;
 } config_format_t;
 
diff --git a/src/lib/confmgt/confmgt.c b/src/lib/confmgt/confmgt.c
index 1c1a1595e..a96c7f96b 100644
--- a/src/lib/confmgt/confmgt.c
+++ b/src/lib/confmgt/confmgt.c
@@ -169,9 +169,14 @@ config_mgr_register_fmt(config_mgr_t *mgr,
               "it had been frozen.");
 
   if (object_idx != IDX_TOPLEVEL) {
-    tor_assertf(fmt->config_suite_offset < 0,
+    tor_assertf(! fmt->has_config_suite,
           "Tried to register a toplevel format in a non-toplevel position");
   }
+  if (fmt->config_suite_offset) {
+    tor_assertf(fmt->has_config_suite,
+                "config_suite_offset was set, but has_config_suite was not.");
+  }
+
   tor_assertf(fmt != mgr->toplevel &&
               ! smartlist_contains(mgr->subconfigs, fmt),
               "Tried to register an already-registered format.");
@@ -223,7 +228,7 @@ config_mgr_add_format(config_mgr_t *mgr,
 static inline config_suite_t **
 config_mgr_get_suite_ptr(const config_mgr_t *mgr, void *toplevel)
 {
-  if (mgr->toplevel->config_suite_offset < 0)
+  if (! mgr->toplevel->has_config_suite)
     return NULL;
   return STRUCT_VAR_P(toplevel, mgr->toplevel->config_suite_offset);
 }
diff --git a/src/lib/crypt_ops/crypto_init.c b/src/lib/crypt_ops/crypto_init.c
index 4b0845619..fbd4da470 100644
--- a/src/lib/crypt_ops/crypto_init.c
+++ b/src/lib/crypt_ops/crypto_init.c
@@ -293,7 +293,6 @@ static const config_format_t crypto_options_fmt = {
              offsetof(crypto_options_t, magic) },
   .vars = crypto_options_t_vars,
   .validate_fn = crypto_options_validate,
-  .config_suite_offset = -1,
 };
 
 /**
diff --git a/src/test/test_confmgr.c b/src/test/test_confmgr.c
index 375a513c0..b59bd8c6a 100644
--- a/src/test/test_confmgr.c
+++ b/src/test/test_confmgr.c
@@ -193,6 +193,7 @@ static const config_format_t pasture_fmt = {
     offsetof(pasture_cfg_t, magic)
   },
   .vars = pasture_vars,
+  .has_config_suite = true,
   .config_suite_offset = offsetof(pasture_cfg_t, subobjs),
   .legacy_validate_fn = legacy_validate_pasture,
 };
@@ -205,7 +206,6 @@ static const config_format_t llama_fmt = {
     offsetof(llama_cfg_t, magic)
   },
   .vars = llama_vars,
-  .config_suite_offset = -1,
   .deprecations = llama_deprecations,
   .abbrevs = llama_abbrevs,
   .clear_fn = clear_llama_cfg,
@@ -221,7 +221,6 @@ static const config_format_t alpaca_fmt = {
     offsetof(alpaca_cfg_t, magic)
   },
   .vars = alpaca_vars,
-  .config_suite_offset = -1,
   .deprecations = alpaca_deprecations,
   .pre_normalize_fn = pre_normalize_alpaca,
   .check_transition_fn = check_transition_alpaca,
diff --git a/src/test/test_confparse.c b/src/test/test_confparse.c
index 39e2de866..3e122a512 100644
--- a/src/test/test_confparse.c
+++ b/src/test/test_confparse.c
@@ -129,7 +129,6 @@ static const config_format_t test_fmt = {
   .deprecations = test_deprecation_notes,
   .vars = test_vars,
   .legacy_validate_fn = test_validate_cb,
-  .config_suite_offset = -1,
 };
 
 /* Make sure that config_init sets everything to the right defaults. */
@@ -824,7 +823,6 @@ static config_format_t etest_fmt = {
   .vars = test_vars,
   .legacy_validate_fn = test_validate_cb,
   .extra = &extra,
-  .config_suite_offset = -1,
 };
 
 /* Try out the feature where we can store unrecognized lines and dump them





More information about the tor-commits mailing list