#ifndef TOR_LIB_CONF_CONFDECL_H
#define TOR_LIB_CONF_CONFDECL_H
#undef CONF_CONTEXT
#include "lib/cc/tokpaste.h"
#include "lib/cc/torint.h"
#define BEGIN_CONF_STRUCT(name) \
PASTE(BEGIN_CONF_STRUCT__, CONF_CONTEXT)(name)
#define END_CONF_STRUCT(name) \
PASTE(END_CONF_STRUCT__, CONF_CONTEXT)(name)
#define CONF_VAR(varname, vartype, varflags, initval) \
PASTE(CONF_VAR__, CONF_CONTEXT)(varname, vartype, varflags, initval)
#ifndef COCCI
#define BEGIN_CONF_STRUCT__STRUCT(name) \
struct name { \
uint32_t magic;
#define END_CONF_STRUCT__STRUCT(name) \
};
#define CONF_VAR__STRUCT(varname, vartype, varflags, initval) \
config_decl_ ## vartype varname;
#define BEGIN_CONF_STRUCT__TABLE(structname) \
\
\
typedef struct structname config_var_reference__obj; \
static const config_var_t structname##_vars[] = {
#define END_CONF_STRUCT__TABLE(structname) \
{ .member = { .name = NULL } } \
};
#define CONF_VAR__TABLE(varname, vartype, varflags, initval) \
{ \
.member = \
{ .name = #varname, \
.type = CONFIG_TYPE_EXTENDED, \
.type_def = &vartype ## _type_defn, \
.offset=offsetof(config_var_reference__obj, varname), \
}, \
.flags = varflags, \
.initvalue = initval \
},
#define BEGIN_CONF_STRUCT__LL_TABLE(structname) \
\
\
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 \
},
#define BEGIN_CONF_STRUCT__STUB_TABLE(structname) \
static const config_var_t structname##_vars[] = {
#define END_CONF_STRUCT__STUB_TABLE(structname) \
{ .member = { .name = NULL } } \
};
#define CONF_VAR__STUB_TABLE(varname, vartype, varflags, initval) \
{ \
.member = \
{ .name = #varname, \
.type = CONFIG_TYPE_IGNORE, \
.offset = -1, \
}, \
.flags = CFLG_GROUP_DISABLED, \
},
#endif
typedef char *config_decl_STRING;
typedef char *config_decl_FILENAME;
typedef int config_decl_POSINT;
typedef uint64_t config_decl_UINT64;
typedef int config_decl_INT;
typedef int config_decl_INTERVAL;
typedef int config_decl_MSEC_INTERVAL;
typedef uint64_t config_decl_MEMUNIT;
typedef double config_decl_DOUBLE;
typedef int config_decl_BOOL;
typedef int config_decl_AUTOBOOL;
typedef time_t config_decl_ISOTIME;
typedef struct smartlist_t config_decl_CSV;
typedef int config_decl_CSV_INTERVAL;
typedef struct config_line_t *config_decl_LINELIST;
typedef struct config_line_t *config_decl_LINELIST_V;
typedef struct nonexistent_struct *config_decl_LINELIST_S;
struct var_type_def_t;
extern const struct var_type_def_t STRING_type_defn;
extern const struct var_type_def_t FILENAME_type_defn;
extern const struct var_type_def_t POSINT_type_defn;
extern const struct var_type_def_t UINT64_type_defn;
extern const struct var_type_def_t INT_type_defn;
extern const struct var_type_def_t INTERVAL_type_defn;
extern const struct var_type_def_t MSEC_INTERVAL_type_defn;
extern const struct var_type_def_t MEMUNIT_type_defn;
extern const struct var_type_def_t DOUBLE_type_defn;
extern const struct var_type_def_t BOOL_type_defn;
extern const struct var_type_def_t AUTOBOOL_type_defn;
extern const struct var_type_def_t ISOTIME_type_defn;
extern const struct var_type_def_t CSV_type_defn;
extern const struct var_type_def_t CSV_INTERVAL_type_defn;
extern const struct var_type_def_t LINELIST_type_defn;
extern const struct var_type_def_t LINELIST_V_type_defn;
extern const struct var_type_def_t LINELIST_S_type_defn;
extern const struct var_type_def_t IGNORE_type_defn;
extern const struct var_type_def_t OBSOLETE_type_defn;
#endif