[tor-commits] [tor/master] Define a low-level version of the confdecl table macros

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


commit 1d108894e7abd85d2ba0beeb69c0ee6071521a6c
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed Oct 30 10:47:29 2019 -0400

    Define a low-level version of the confdecl table macros
    
    This version uses the enum rather than the type definitions, to
    avoid layering violations and linking problems.
---
 src/lib/conf/confdecl.h | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/lib/conf/confdecl.h b/src/lib/conf/confdecl.h
index f6f9dc527..19b6f8509 100644
--- a/src/lib/conf/confdecl.h
+++ b/src/lib/conf/confdecl.h
@@ -39,6 +39,11 @@
  * The two above snippets will define a structure called `module_options_t`
  * with appropriate members, and a table of config_var_t objects called
  * `module_options_t_vars[]`.
+ *
+ * For lower-level modules, you can say `#define CONF_TABLE LL_TABLE`, and get
+ * a table definition suitable for use in modules that are at a lower level
+ * than lib/confmgt.  Note that the types for these tables cannot include any
+ * extended types.
  **/
 
 #ifndef TOR_LIB_CONF_CONFDECL_H
@@ -104,6 +109,31 @@
    .initvalue = initval                                         \
   },
 /**@}*/
+
+/**
+ * @defgroup LL_TABLE_MACROS Internal macros: low-level table definitions.
+ * Implementation helpers: the regular confdecl macros expand to these
+ * when CONF_CONTEXT is defined to LL_TABLE.  Don't use them directly.
+ * @{*/
+#define BEGIN_CONF_STRUCT__LL_TABLE(structname)                         \
+  /* We use this typedef so we can refer to the config type */          \
+  /* without having its name as a macro argument to CONF_VAR. */        \
+  typedef struct structname config_var_reference__obj;  \
+  static const config_var_t structname##_vars[] = {
+#define END_CONF_STRUCT__LL_TABLE(structname)   \
+  { .member = { .name = NULL } }                \
+    };
+#define CONF_VAR__LL_TABLE(varname, vartype, varflags, initval) \
+  {                                                             \
+   .member =                                                    \
+   { .name = #varname,                                          \
+     .type = CONFIG_TYPE_ ## vartype,                           \
+     .offset=offsetof(config_var_reference__obj, varname),      \
+   },                                                           \
+   .flags = varflags,                                           \
+   .initvalue = initval                                         \
+  },
+/**@}*/
 #endif
 
 /** Type aliases for the "commonly used" configuration types.





More information about the tor-commits mailing list