mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-21 01:42:18 +00:00
Refactor "conf_schema.h" to fix compile warnings
In STRUCT() and ARRAY() declarations, change the optional "validator" arg from taking a bare function name to enclose the function name in VALIDATOR(function)
This commit is contained in:
parent
d2015a44b9
commit
ccece93309
35
conf.h
35
conf.h
@ -110,10 +110,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
* field set to 0 if the node contains the option's default value, or 1 if the option's value
|
||||
* differed from the default.
|
||||
*
|
||||
* If a STRUCT(NAME, VALIDATOR) or ARRAY(NAME, FLAGS, VALIDATOR) schema declaration is given a
|
||||
* validator function, then the function must have the following signature:
|
||||
* If a STRUCT(NAME) or ARRAY(NAME, FLAGS) schema declaration contains a VALIDATOR(VALIDATOR_FUNC)
|
||||
* declaration, then the function must have the following signature:
|
||||
*
|
||||
* - int VALIDATOR(struct config_NAME *dest, int orig_result);
|
||||
* - int VALIDATOR_FUNC(struct config_NAME *dest, int orig_result);
|
||||
*
|
||||
* A C function which validates the contents of the given C structure (struct or array) as
|
||||
* defined in the schema. This function is invoked by the cf_opt_config_NAME() parser function
|
||||
@ -344,7 +344,7 @@ struct pattern_list {
|
||||
#define PATTERN_LIST_EMPTY ((struct pattern_list){.patc = 0})
|
||||
|
||||
// Generate config struct definitions, struct config_NAME.
|
||||
#define STRUCT(__name, __validator...) \
|
||||
#define STRUCT(__name, __validators...) \
|
||||
struct config_##__name {
|
||||
#define NODE(__type, __element, __default, __repr, __flags, __comment) \
|
||||
__type __element;
|
||||
@ -367,7 +367,7 @@ struct pattern_list {
|
||||
#define STRING_DEFAULT(__element, __default)
|
||||
#define SUB_STRUCT_DEFAULT(__name, __element, __dfllabel...)
|
||||
#define END_STRUCT_DEFAULT
|
||||
#define ARRAY(__name, __flags, __validator...) \
|
||||
#define ARRAY(__name, __flags, __validators...) \
|
||||
struct config_##__name { \
|
||||
unsigned ac; \
|
||||
struct config_##__name##__element {
|
||||
@ -414,7 +414,7 @@ struct pattern_list {
|
||||
#undef END_ARRAY
|
||||
|
||||
// Generate config function prototypes, cf_dfl_config_NAME(), cf_sch_config_NAME(), cf_cpy_config_NAME().
|
||||
#define STRUCT(__name, __validator...) \
|
||||
#define STRUCT(__name, __validators...) \
|
||||
int cf_dfl_config_##__name(struct config_##__name *); \
|
||||
int cf_dfl_config_##__name##_cf_(struct config_##__name *); \
|
||||
int cf_sch_config_##__name(struct cf_om_node **parentp);
|
||||
@ -435,7 +435,7 @@ struct pattern_list {
|
||||
#define STRING_DEFAULT(__element, __default)
|
||||
#define SUB_STRUCT_DEFAULT(__name, __element, __dfllabel...)
|
||||
#define END_STRUCT_DEFAULT
|
||||
#define ARRAY(__name, __flags, __validator...) \
|
||||
#define ARRAY(__name, __flags, __validators...) \
|
||||
int cf_dfl_config_##__name(struct config_##__name *); \
|
||||
int cf_sch_config_##__name(struct cf_om_node **parentp);
|
||||
#define KEY_ATOM(__type, __keyrepr)
|
||||
@ -472,15 +472,17 @@ struct pattern_list {
|
||||
#undef END_ARRAY
|
||||
|
||||
// Generate config parser function prototypes: cf_opt_REPR(), cf_fmt_REPR(), cf_cmp_REPR()
|
||||
#define __VALIDATOR(__name, __validator...) \
|
||||
#define VALIDATOR(__validator...) \
|
||||
, __validator
|
||||
#define __VALIDATOR(__name, __validators...) \
|
||||
typedef int __validator_func__config_##__name##__t(const struct cf_om_node *, struct config_##__name *, int); \
|
||||
__validator_func__config_##__name##__t __dummy__validator_func__config_##__name, ##__validator;
|
||||
#define STRUCT(__name, __validator...) \
|
||||
__validator_func__config_##__name##__t __dummy__validator_func__config_##__name __validators;
|
||||
#define STRUCT(__name, __validators...) \
|
||||
int cf_opt_config_##__name(struct config_##__name *, const struct cf_om_node *); \
|
||||
int cf_fmt_config_##__name(struct cf_om_node **, const struct config_##__name *); \
|
||||
int cf_xfmt_config_##__name(struct cf_om_node **, const struct config_##__name *, const struct config_##__name *); \
|
||||
int cf_cmp_config_##__name(const struct config_##__name *, const struct config_##__name *); \
|
||||
__VALIDATOR(__name, ##__validator)
|
||||
__VALIDATOR(__name, ##__validators)
|
||||
#define NODE(__type, __element, __default, __repr, __flags, __comment) \
|
||||
int cf_opt_##__repr(__type *, const struct cf_om_node *); \
|
||||
int cf_fmt_##__repr(struct cf_om_node **, const __type *); \
|
||||
@ -511,12 +513,12 @@ struct pattern_list {
|
||||
#define STRING_DEFAULT(__element, __default)
|
||||
#define SUB_STRUCT_DEFAULT(__name, __element, __dfllabel...)
|
||||
#define END_STRUCT_DEFAULT
|
||||
#define ARRAY(__name, __flags, __validator...) \
|
||||
#define ARRAY(__name, __flags, __validators...) \
|
||||
int cf_opt_config_##__name(struct config_##__name *, const struct cf_om_node *); \
|
||||
int cf_fmt_config_##__name(struct cf_om_node **, const struct config_##__name *); \
|
||||
int cf_xfmt_config_##__name(struct cf_om_node **, const struct config_##__name *, const struct config_##__name *); \
|
||||
int cf_cmp_config_##__name(const struct config_##__name *, const struct config_##__name *); \
|
||||
__VALIDATOR(__name, ##__validator)
|
||||
__VALIDATOR(__name, ##__validators)
|
||||
#define KEY_ATOM(__type, __keyrepr) \
|
||||
int cf_opt_##__keyrepr(__type *, const char *); \
|
||||
int cf_fmt_##__keyrepr(const char **, const __type *); \
|
||||
@ -550,6 +552,7 @@ struct pattern_list {
|
||||
#define END_ARRAY(__size)
|
||||
#include "conf_schema.h"
|
||||
#undef __VALIDATOR
|
||||
#undef VALIDATOR
|
||||
#undef STRUCT
|
||||
#undef NODE
|
||||
#undef ATOM
|
||||
@ -575,7 +578,8 @@ struct pattern_list {
|
||||
#undef END_ARRAY
|
||||
|
||||
// Generate config array search-by-key function prototypes.
|
||||
#define STRUCT(__name, __validator...)
|
||||
#define VALIDATOR(__validator...)
|
||||
#define STRUCT(__name, __validators...)
|
||||
#define NODE(__type, __element, __default, __repr, __flags, __comment)
|
||||
#define ATOM(__type, __element, __default, __repr, __flags, __comment)
|
||||
#define STRING(__size, __element, __default, __repr, __flags, __comment)
|
||||
@ -589,7 +593,7 @@ struct pattern_list {
|
||||
#define STRING_DEFAULT(__element, __default)
|
||||
#define SUB_STRUCT_DEFAULT(__name, __element, __dfllabel...)
|
||||
#define END_STRUCT_DEFAULT
|
||||
#define ARRAY(__name, __flags, __validator...) \
|
||||
#define ARRAY(__name, __flags, __validators...) \
|
||||
int config_##__name##__get(const struct config_##__name *,
|
||||
#define KEY_ATOM(__type, __keyrepr) \
|
||||
const __type *);
|
||||
@ -602,6 +606,7 @@ struct pattern_list {
|
||||
#define VALUE_NODE_STRUCT(__structname, __eltrepr)
|
||||
#define END_ARRAY(__size)
|
||||
#include "conf_schema.h"
|
||||
#undef VALIDATOR
|
||||
#undef STRUCT
|
||||
#undef NODE
|
||||
#undef ATOM
|
||||
|
49
conf_parse.c
49
conf_parse.c
@ -25,7 +25,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#include "conf.h"
|
||||
|
||||
// Generate config set-default function definitions, cf_dfl_config_NAME().
|
||||
#define STRUCT(__name, __validator...) \
|
||||
#define VALIDATOR(__validator)
|
||||
#define STRUCT(__name, __options...) \
|
||||
int cf_dfl_config_##__name(struct config_##__name *s) { \
|
||||
return cf_dfl_config_##__name##_cf_(s); \
|
||||
} \
|
||||
@ -59,7 +60,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define END_STRUCT_DEFAULT \
|
||||
return CFOK; \
|
||||
}
|
||||
#define ARRAY(__name, __flags, __validator...) \
|
||||
#define ARRAY(__name, __flags, __options...) \
|
||||
int cf_dfl_config_##__name(struct config_##__name *s) { \
|
||||
return cf_dfl_config_##__name##_cf_(s); \
|
||||
} \
|
||||
@ -76,6 +77,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define VALUE_NODE_STRUCT(__structname, __eltrepr)
|
||||
#define END_ARRAY(__size)
|
||||
#include "conf_schema.h"
|
||||
#undef VALIDATOR
|
||||
#undef STRUCT
|
||||
#undef NODE
|
||||
#undef ATOM
|
||||
@ -101,7 +103,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#undef END_ARRAY
|
||||
|
||||
// Generate config assign function definitions, cf_cpy_config_NAME().
|
||||
#define STRUCT(__name, __validator...) \
|
||||
#define VALIDATOR(__validator)
|
||||
#define STRUCT(__name, __options...) \
|
||||
__attribute__((unused)) static void __cf_unused_2_##__name(struct config_##__name *dst, const struct config_##__name *src) {
|
||||
#define END_STRUCT \
|
||||
}
|
||||
@ -124,7 +127,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define STRING_DEFAULT(__element, __default)
|
||||
#define SUB_STRUCT_DEFAULT(__name, __element, __dfllabel...)
|
||||
#define END_STRUCT_DEFAULT
|
||||
#define ARRAY(__name, __flags, __validator...)
|
||||
#define ARRAY(__name, __flags, __options...)
|
||||
#define KEY_ATOM(__type, __keyrepr)
|
||||
#define KEY_STRING(__strsize, __keyrepr)
|
||||
#define VALUE_ATOM(__type, __eltrepr)
|
||||
@ -134,6 +137,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define VALUE_NODE_STRUCT(__structname, __eltrepr)
|
||||
#define END_ARRAY(__size)
|
||||
#include "conf_schema.h"
|
||||
#undef VALIDATOR
|
||||
#undef STRUCT
|
||||
#undef NODE
|
||||
#undef ATOM
|
||||
@ -171,9 +175,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define NO_DUPLICATES |__NO_DUPLICATES
|
||||
|
||||
// Generate parsing functions, cf_opt_config_SECTION()
|
||||
#define STRUCT(__name, __validator...) \
|
||||
#define VALIDATOR(__validator) \
|
||||
validator = (__validator);
|
||||
#define STRUCT(__name, __options...) \
|
||||
int cf_opt_config_##__name(struct config_##__name *strct, const struct cf_om_node *node) { \
|
||||
int (*validator)(const struct cf_om_node *, struct config_##__name *, int) = (NULL, ##__validator); \
|
||||
int (*validator)(const struct cf_om_node *, struct config_##__name *, int) = NULL; \
|
||||
__options \
|
||||
int result = CFEMPTY; \
|
||||
char used[node->nodc]; \
|
||||
memset(used, 0, node->nodc * sizeof used[0]);
|
||||
@ -243,11 +250,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define STRING_DEFAULT(__element, __default)
|
||||
#define SUB_STRUCT_DEFAULT(__name, __element, __dfllabel...)
|
||||
#define END_STRUCT_DEFAULT
|
||||
#define ARRAY(__name, __flags, __validator...) \
|
||||
#define ARRAY(__name, __flags, __options...) \
|
||||
int cf_opt_config_##__name(struct config_##__name *array, const struct cf_om_node *node) { \
|
||||
int flags = (0 __flags); \
|
||||
int (*keycmp)(const void *, const void *) = NULL; \
|
||||
int (*validator)(const struct cf_om_node *, struct config_##__name *, int) = (NULL, ##__validator); \
|
||||
int (*validator)(const struct cf_om_node *, struct config_##__name *, int) = NULL; \
|
||||
__options \
|
||||
int result = CFOK; \
|
||||
unsigned i, n; \
|
||||
for (n = 0, i = 0; i < node->nodc && n < NELS(array->av); ++i) { \
|
||||
@ -322,6 +330,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define VALUE_NODE_STRUCT(__structname, __eltrepr) \
|
||||
__ARRAY_VALUE(cf_dfl_config_##__structname(&array->av[n].value), cf_opt_##__eltrepr(&array->av[n].value, child))
|
||||
#include "conf_schema.h"
|
||||
#undef VALIDATOR
|
||||
#undef STRUCT
|
||||
#undef NODE
|
||||
#undef ATOM
|
||||
@ -349,7 +358,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#undef END_ARRAY
|
||||
|
||||
// Generate config array search-by-key functions.
|
||||
#define STRUCT(__name, __validator...)
|
||||
#define VALIDATOR(__validator)
|
||||
#define STRUCT(__name, __options...)
|
||||
#define NODE(__type, __element, __default, __repr, __flags, __comment)
|
||||
#define ATOM(__type, __element, __default, __repr, __flags, __comment)
|
||||
#define STRING(__size, __element, __default, __repr, __flags, __comment)
|
||||
@ -363,7 +373,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define STRING_DEFAULT(__element, __default)
|
||||
#define SUB_STRUCT_DEFAULT(__name, __element, __dfllabel...)
|
||||
#define END_STRUCT_DEFAULT
|
||||
#define ARRAY(__name, __flags, __validator...) \
|
||||
#define ARRAY(__name, __flags, __options...) \
|
||||
int config_##__name##__get(const struct config_##__name *array,
|
||||
#define KEY_ATOM(__type, __keyrepr) \
|
||||
const __type *key) { \
|
||||
@ -388,6 +398,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define VALUE_NODE_STRUCT(__structname, __eltrepr)
|
||||
#define END_ARRAY(__size)
|
||||
#include "conf_schema.h"
|
||||
#undef VALIDATOR
|
||||
#undef STRUCT
|
||||
#undef NODE
|
||||
#undef ATOM
|
||||
@ -413,7 +424,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#undef END_ARRAY
|
||||
|
||||
// Generate config schema dump functions, cf_sch_config_NAME().
|
||||
#define STRUCT(__name, __validator...) \
|
||||
#define VALIDATOR(__validator)
|
||||
#define STRUCT(__name, __options...) \
|
||||
int cf_sch_config_##__name(struct cf_om_node **rootp) { \
|
||||
int i; \
|
||||
struct cf_om_node **childp;
|
||||
@ -460,7 +472,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define STRING_DEFAULT(__element, __default)
|
||||
#define SUB_STRUCT_DEFAULT(__name, __element, __dfllabel...)
|
||||
#define END_STRUCT_DEFAULT
|
||||
#define ARRAY(__name, __flags, __validator...) \
|
||||
#define ARRAY(__name, __flags, __options...) \
|
||||
int cf_sch_config_##__name(struct cf_om_node **rootp) { \
|
||||
int i; \
|
||||
struct cf_om_node **childp;
|
||||
@ -489,6 +501,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#undef __ADD_CHILD
|
||||
#undef __ATOM
|
||||
#undef __STRUCT
|
||||
#undef VALIDATOR
|
||||
#undef STRUCT
|
||||
#undef NODE
|
||||
#undef ATOM
|
||||
@ -514,7 +527,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#undef END_ARRAY
|
||||
|
||||
// Generate formatting functions, cf_fmt_config_SECTION()
|
||||
#define STRUCT(__name, __validator...) \
|
||||
#define VALIDATOR(__validator)
|
||||
#define STRUCT(__name, __options...) \
|
||||
int cf_fmt_config_##__name(struct cf_om_node **parentp, const struct config_##__name *strct) { \
|
||||
return cf_xfmt_config_##__name(parentp, strct, NULL); \
|
||||
} \
|
||||
@ -621,7 +635,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define STRING_DEFAULT(__element, __default)
|
||||
#define SUB_STRUCT_DEFAULT(__name, __element, __dfllabel...)
|
||||
#define END_STRUCT_DEFAULT
|
||||
#define ARRAY(__name, __flags, __validator...) \
|
||||
#define ARRAY(__name, __flags, __options...) \
|
||||
int cf_xfmt_config_##__name(struct cf_om_node **parentp, const struct config_##__name *array, const struct config_##__name *UNUSED(dflt)) { \
|
||||
return cf_fmt_config_##__name(parentp, array); \
|
||||
} \
|
||||
@ -694,6 +708,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
ret = cf_fmt_##__eltrepr(&(*parentp)->nodv[(unsigned)n], &array->av[i].value); \
|
||||
__ARRAY_VALUE(cf_fmt_##__eltrepr)
|
||||
#include "conf_schema.h"
|
||||
#undef VALIDATOR
|
||||
#undef STRUCT
|
||||
#undef NODE
|
||||
#undef ATOM
|
||||
@ -725,7 +740,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#undef END_ARRAY
|
||||
|
||||
// Generate comparison functions, cf_cmp_config_SECTION()
|
||||
#define STRUCT(__name, __validator...) \
|
||||
#define VALIDATOR(__validator)
|
||||
#define STRUCT(__name, __options...) \
|
||||
int cf_cmp_config_##__name(const struct config_##__name *a, const struct config_##__name *b) { \
|
||||
int c;
|
||||
#define NODE(__type, __element, __default, __repr, __flags, __comment) \
|
||||
@ -757,7 +773,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#define STRING_DEFAULT(__element, __default)
|
||||
#define SUB_STRUCT_DEFAULT(__name, __element, __dfllabel...)
|
||||
#define END_STRUCT_DEFAULT
|
||||
#define ARRAY(__name, __flags, __validator...) \
|
||||
#define ARRAY(__name, __flags, __options...) \
|
||||
int cf_cmp_config_##__name(const struct config_##__name *a, const struct config_##__name *b) { \
|
||||
int c; \
|
||||
unsigned i; \
|
||||
@ -788,6 +804,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
return (a->ac < b->ac) ? -1 : (a->ac > b->ac) ? 1 : 0; \
|
||||
}
|
||||
#include "conf_schema.h"
|
||||
#undef VALIDATOR
|
||||
#undef STRUCT
|
||||
#undef NODE
|
||||
#undef ATOM
|
||||
|
@ -90,7 +90,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* A schema definition is composed from the following STRUCT and ARRAY definitions:
|
||||
*
|
||||
* STRUCT(name [, validatorfunc])
|
||||
* STRUCT(name) [ VALIDATOR(validatorfunc) ]
|
||||
* element-declaration
|
||||
* element-declaration
|
||||
* ...
|
||||
@ -104,7 +104,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
* SUB_STRUCT(structname, element, flags [, default_label])
|
||||
* NODE_STRUCT(structname, element, repr, flags [, default_label])
|
||||
*
|
||||
* ARRAY(name, flags [, validatorfunc])
|
||||
* ARRAY(name, flags) [ VALIDATOR(validatorfunc) ]
|
||||
* key-declaration
|
||||
* value-declaration
|
||||
* END_ARRAY(size)
|
||||
@ -355,7 +355,7 @@ ATOM(uint16_t, remote_port, 4130, uint16_nonzero,, "Remote port num
|
||||
ATOM(uint16_t, local_port, 4131, uint16_nonzero,, "Local port number")
|
||||
END_STRUCT
|
||||
|
||||
ARRAY(argv, NO_DUPLICATES, vld_argv)
|
||||
ARRAY(argv, NO_DUPLICATES, VALIDATOR(vld_argv))
|
||||
KEY_ATOM(unsigned short, ushort_nonzero)
|
||||
VALUE_STRING(128, str)
|
||||
END_ARRAY(16)
|
||||
@ -445,7 +445,7 @@ KEY_ATOM(sid_t, sid)
|
||||
VALUE_SUB_STRUCT(host)
|
||||
END_ARRAY(32)
|
||||
|
||||
STRUCT(network_interface, vld_network_interface)
|
||||
STRUCT(network_interface, VALIDATOR(vld_network_interface))
|
||||
ATOM(bool_t, exclude, 0, boolean,, "If true, do not use matching interfaces")
|
||||
ATOM(struct pattern_list, match, PATTERN_LIST_EMPTY, pattern_list,, "Names that match network interface")
|
||||
ATOM(short, socket_type, SOCK_UNSPECIFIED, socket_type,, "Type of network socket; stream, dgram or file")
|
||||
|
Loading…
x
Reference in New Issue
Block a user