commit 1d108894e7abd85d2ba0beeb69c0ee6071521a6c Author: Nick Mathewson nickm@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.