mirror of
https://github.com/yrutschle/sslh.git
synced 2025-04-13 07:37:15 +03:00
config from new c2s: underscore and dashes are equivalent
This commit is contained in:
parent
10fe9c6e27
commit
dfa764e2e8
57
sslh-conf.c
57
sslh-conf.c
@ -1,5 +1,5 @@
|
||||
/* Generated by conf2struct (https://www.rutschle.net/tech/conf2struct/README)
|
||||
* on Fri Dec 27 18:18:30 2019.
|
||||
* on Sun Jan 26 21:17:47 2020.
|
||||
|
||||
# conf2struct: generate libconf parsers that read to structs
|
||||
# Copyright (C) 2018-2019 Yves Rutschle
|
||||
@ -1000,6 +1000,47 @@ static void print_setting(config_type type, void* val)
|
||||
}
|
||||
}
|
||||
|
||||
/* Changes all dashes to underscores in a string of
|
||||
* vice-versa */
|
||||
void strswap_ud(const char target, char* str)
|
||||
{
|
||||
char* c;
|
||||
for (c = str; *c; c++)
|
||||
if (*c == (target == '_' ? '-' : '_'))
|
||||
*c = (target == '_' ? '_' : '-');
|
||||
}
|
||||
|
||||
/* Same as config_setting_lookup() but looks up with dash or
|
||||
* underscore so `my_setting` and `my-setting` match the same */
|
||||
config_setting_t* config_setting_lookup_ud(config_setting_t* cfg, struct config_desc* desc)
|
||||
{
|
||||
config_setting_t* setting;
|
||||
char name[strlen(desc->name)+1];;
|
||||
strcpy(name, desc->name);
|
||||
|
||||
strswap_ud('_', name);
|
||||
setting = config_setting_lookup(cfg, name);
|
||||
if (setting)
|
||||
return setting;
|
||||
|
||||
strswap_ud('-', name);
|
||||
setting = config_setting_lookup(cfg, name);
|
||||
return setting;
|
||||
}
|
||||
|
||||
int lookup_typed_ud(config_setting_t* cfg, void* target, struct config_desc *desc)
|
||||
{
|
||||
lookup_fn lookup_fn = lookup_fns[desc->type];
|
||||
char name[strlen(desc->name)+1];;
|
||||
strcpy(name, desc->name);
|
||||
|
||||
strswap_ud('_', name);
|
||||
if (lookup_fn(cfg, name, ((char*)target) + desc->offset) == CONFIG_TRUE)
|
||||
return CONFIG_TRUE;
|
||||
|
||||
strswap_ud('-', name);
|
||||
return lookup_fn(cfg, name, ((char*)target) + desc->offset);
|
||||
}
|
||||
|
||||
/* When traversing configuration, allocate memory for plural
|
||||
* types, init for scalars */
|
||||
@ -1013,7 +1054,7 @@ static void read_block_init(void* target, config_setting_t* cfg, struct config_d
|
||||
case CFG_LIST:
|
||||
case CFG_ARRAY:
|
||||
if (cfg) {
|
||||
setting = config_setting_lookup(cfg, desc->name);
|
||||
setting = config_setting_lookup_ud(cfg, desc);
|
||||
if (setting)
|
||||
len = config_setting_length(setting);
|
||||
}
|
||||
@ -1055,14 +1096,13 @@ static int read_block_setval(void* target,
|
||||
int i;
|
||||
size_t len = 0;
|
||||
void* block;
|
||||
lookup_fn lookup_fn;
|
||||
int in_cfg = 0, in_cl = 0; /* Present in config file? present on command line? */
|
||||
config_setting_t* setting = NULL;
|
||||
|
||||
switch (desc->type) {
|
||||
case CFG_LIST:
|
||||
if (cfg) {
|
||||
setting = config_setting_lookup(cfg, desc->name);
|
||||
setting = config_setting_lookup_ud(cfg, desc);
|
||||
if (setting)
|
||||
len = config_setting_length(setting);
|
||||
block = *(void**)(((char*)target) + desc->offset);
|
||||
@ -1076,7 +1116,7 @@ static int read_block_setval(void* target,
|
||||
|
||||
case CFG_ARRAY:
|
||||
if (cfg) {
|
||||
setting = config_setting_lookup(cfg, desc->name);
|
||||
setting = config_setting_lookup_ud(cfg, desc);
|
||||
if (setting)
|
||||
len = config_setting_length(setting);
|
||||
block = *(void**)(((char*)target) + desc->offset);
|
||||
@ -1090,18 +1130,17 @@ static int read_block_setval(void* target,
|
||||
break;
|
||||
|
||||
case CFG_GROUP:
|
||||
if (cfg) setting = config_setting_lookup(cfg, desc->name);
|
||||
if (cfg) setting = config_setting_lookup_ud(cfg, desc);
|
||||
block = *(void**)(((char*)target) + desc->offset);
|
||||
if (!read_block(setting, block, desc->sub_group, errmsg)) return 0;
|
||||
break;
|
||||
|
||||
default: /* scalar types */
|
||||
TRACE_READ((" `%s'", desc->name));
|
||||
if (cfg && config_setting_lookup(cfg, desc->name)) {
|
||||
if (cfg && config_setting_lookup_ud(cfg, desc)) {
|
||||
TRACE_READ((" in config file: "));
|
||||
/* setting is present in cfg, look it up */
|
||||
lookup_fn = lookup_fns[desc->type];
|
||||
if (lookup_fn(cfg, desc->name, ((char*)target) + desc->offset) != CONFIG_TRUE) {
|
||||
if (lookup_typed_ud(cfg, target, desc) != CONFIG_TRUE) {
|
||||
TRACE_READ((" but wrong type (expected %s) ", type2str[desc->type]));
|
||||
asprintf(errmsg, "Option \"%s\" wrong type, expected %s\n",
|
||||
desc->name, type2str[desc->type]);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Generated by conf2struct (https://www.rutschle.net/tech/conf2struct/README)
|
||||
* on Fri Dec 27 18:18:30 2019.
|
||||
* on Sun Jan 26 21:17:47 2020.
|
||||
|
||||
# conf2struct: generate libconf parsers that read to structs
|
||||
# Copyright (C) 2018-2019 Yves Rutschle
|
||||
|
Loading…
x
Reference in New Issue
Block a user