aboutsummaryrefslogtreecommitdiff
path: root/src/lib/conf
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-10-30 10:47:29 -0400
committerNick Mathewson <nickm@torproject.org>2019-11-07 07:28:43 -0500
commit1d108894e7abd85d2ba0beeb69c0ee6071521a6c (patch)
tree7ab3553dafcf04f8617b5c5f18536546689dd464 /src/lib/conf
parent683d4c2bc8379084062dfd79d679e89c2713ff50 (diff)
downloadtor-1d108894e7abd85d2ba0beeb69c0ee6071521a6c.tar.gz
tor-1d108894e7abd85d2ba0beeb69c0ee6071521a6c.zip
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.
Diffstat (limited to 'src/lib/conf')
-rw-r--r--src/lib/conf/confdecl.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/lib/conf/confdecl.h b/src/lib/conf/confdecl.h
index f6f9dc527b..19b6f85090 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.