};
struct setting_parser_info auth_passdb_setting_parser_info = {
+ MEMBER(module_name) NULL,
MEMBER(defines) auth_passdb_setting_defines,
MEMBER(defaults) NULL,
};
struct setting_parser_info auth_userdb_setting_parser_info = {
+ MEMBER(module_name) NULL,
MEMBER(defines) auth_userdb_setting_defines,
MEMBER(defaults) NULL,
};
struct setting_parser_info auth_setting_parser_info = {
+ MEMBER(module_name) "auth",
MEMBER(defines) auth_setting_defines,
MEMBER(defaults) &auth_default_settings,
#ifndef ALL_SETTINGS_H
#define ALL_SETTINGS_H
-struct all_settings_root {
- const char *module_name;
- struct setting_parser_info *root;
-};
-extern const struct all_settings_root all_roots[];
+extern const struct setting_parser_info *all_roots[];
#endif
{
unsigned int i;
- for (i = 0; dest[i].module_name != NULL; i++) {
+ for (i = 0; dest[i].root != NULL; i++) {
if (settings_parser_apply_changes(dest[i].parser,
src->parsers[i].parser, pool,
error_r) < 0) {
/* all of them should have the same number of parsers.
duplicate our initial parsers from the first match */
- for (count = 0; src[0]->parsers[count].module_name != NULL; count++) ;
+ for (count = 0; src[0]->parsers[count].root != NULL; count++) ;
dest = p_new(pool, struct config_module_parser, count + 1);
for (i = 0; i < count; i++) {
dest[i] = src[0]->parsers[i];
{
unsigned int i;
- for (i = 0; parsers[i].module_name != NULL; i++)
+ for (i = 0; parsers[i].root != NULL; i++)
settings_parser_deinit(&parsers[i].parser);
}
struct config_section_stack *prev;
struct config_filter filter;
- /* module_name=NULL-terminated list of parsers */
+ /* root=NULL-terminated list of parsers */
struct config_module_parser *parsers;
unsigned int pathlen;
};
bool found = FALSE;
int ret;
- for (l = ctx->cur_section->parsers; l->module_name != NULL; l++) {
+ for (l = ctx->cur_section->parsers; l->root != NULL; l++) {
ret = settings_parse_line(l->parser, line);
if (ret > 0) {
found = TRUE;
struct config_module_parser *dest;
unsigned int i, count;
- for (count = 0; all_roots[count].module_name != NULL; count++) ;
+ for (count = 0; all_roots[count] != NULL; count++) ;
dest = p_new(pool, struct config_module_parser, count + 1);
for (i = 0; i < count; i++) {
- dest[i].module_name = all_roots[i].module_name;
- dest[i].root = all_roots[i].root;
- dest[i].parser = settings_parser_init(pool, all_roots[i].root,
+ dest[i].root = all_roots[i];
+ dest[i].parser = settings_parser_init(pool, all_roots[i],
settings_parser_flags);
}
return dest;
const struct config_module_parser *p,
const char **error_r)
{
- for (; p->module_name != NULL; p++) {
+ for (; p->root != NULL; p++) {
settings_parse_var_skip(p->parser);
if (!settings_parser_check(p->parser, ctx->pool, error_r))
return -1;
ctx.pool = pool_alloconly_create("config file parser", 1024*64);
ctx.path = path;
- for (count = 0; all_roots[count].module_name != NULL; count++) ;
+ for (count = 0; all_roots[count] != NULL; count++) ;
ctx.root_parsers =
p_new(ctx.pool, struct config_module_parser, count+1);
for (i = 0; i < count; i++) {
- ctx.root_parsers[i].module_name = all_roots[i].module_name;
- ctx.root_parsers[i].root = all_roots[i].root;
+ ctx.root_parsers[i].root = all_roots[i];
ctx.root_parsers[i].parser =
- settings_parser_init(ctx.pool, all_roots[i].root,
+ settings_parser_init(ctx.pool, all_roots[i],
settings_parser_flags);
}
#define CONFIG_PARSER_H
struct config_module_parser {
- const char *module_name;
- struct setting_parser_info *root;
+ const struct setting_parser_info *root;
struct setting_parser_context *parser;
void *settings;
};
void *context;
};
-static bool parsers_are_connected(struct setting_parser_info *root,
- struct setting_parser_info *info)
+static bool parsers_are_connected(const struct setting_parser_info *root,
+ const struct setting_parser_info *info)
{
- struct setting_parser_info *const *dep, *p;
+ const struct setting_parser_info *p;
+ struct setting_parser_info *const *dep;
/* we're trying to find info or its parents from root's dependencies. */
{
struct config_module_parser *l;
- if (strcmp(list->module_name, module) == 0)
+ if (strcmp(list->root->module_name, module) == 0)
return TRUE;
if (list->root == &master_service_setting_parser_info) {
/* everyone wants master service settings */
return TRUE;
}
- for (l = config_module_parsers; l->module_name != NULL; l++) {
- if (strcmp(l->module_name, module) != 0)
+ for (l = config_module_parsers; l->root != NULL; l++) {
+ if (strcmp(l->root->module_name, module) != 0)
continue;
/* see if we can find a way to get from the original parser
ctx.keys = hash_table_create(default_pool, ctx.pool, 0,
str_hash, (hash_cmp_callback_t *)strcmp);
- for (i = 0; parsers[i].module_name != NULL; i++) {
+ for (i = 0; parsers[i].root != NULL; i++) {
parser = &parsers[i];
if (*module != '\0' &&
!config_module_parser_is_in_service(parser, module))
const char *const *value;
const void *set;
- for (l = config_module_parsers; l->module_name != NULL; l++) {
- if (strcmp(l->module_name, "mail") != 0)
+ for (l = config_module_parsers; l->root != NULL; l++) {
+ if (strcmp(l->root->module_name, "mail") != 0)
continue;
set = settings_parser_get(l->parser);
my $externs = "";
my $code = "";
my %funcs;
+ my $cur_name = "";
while (<$f>) {
my $write = 0;
$state++;
} elsif (/^(static )?struct setting_parser_info (.*) = {/) {
$state++;
- my $name = $2;
- $parsers{$name} = 1 if ($name !~ /\*/);
+ $cur_name = $2;
} elsif (/^extern struct setting_parser_info (.*);/) {
$externs .= "extern struct setting_parser_info $1;\n";
} elsif (/\/\* <settings checks> \*\//) {
if ($state == 1 || $state == 3) {
if ($state == 1) {
+ if (/MEMBER\(module_name\) "(.*)"/) {
+ $parsers{$cur_name} = $1;
+ }
if (/DEFLIST.*".*",(.*)$/) {
my $value = $1;
if ($value =~ /.*&(.*)\)/) {
close $f;
}
-print "const struct all_settings_root all_roots[] = {\n";
+print "const struct setting_parser_info *all_roots[] = {\n";
foreach my $name (keys %parsers) {
- next if (!$parsers{$name});
+ my $module = $parsers{$name};
+ next if (!$module);
- my $module = "";
- if ($name =~ /^([^_]*)/) {
- $module = $1;
- }
- print " { \"$module\", &".$name." }, \n";
+ print "\t&".$name.", \n";
}
-print " { NULL, NULL }\n";
+print "\tNULL\n";
print "};\n";
};
struct setting_parser_info dict_setting_parser_info = {
+ MEMBER(module_name) "dict",
MEMBER(defines) dict_setting_defines,
MEMBER(defaults) &dict_default_settings,
};
struct setting_parser_info imap_setting_parser_info = {
+ MEMBER(module_name) "imap",
MEMBER(defines) imap_setting_defines,
MEMBER(defaults) &imap_default_settings,
};
struct setting_parser_info lda_setting_parser_info = {
+ MEMBER(module_name) "lda",
MEMBER(defines) lda_setting_defines,
MEMBER(defaults) &lda_default_settings,
};
struct setting_parser_info master_service_setting_parser_info = {
+ MEMBER(module_name) "master",
MEMBER(defines) master_service_setting_defines,
MEMBER(defaults) &master_service_default_settings,
};
static const struct setting_parser_info strlist_info = {
+ MEMBER(module_name) NULL,
MEMBER(defines) NULL,
MEMBER(defaults) NULL,
#name, offsetof(struct struct_name, name), NULL }
struct setting_parser_info {
+ const char *module_name;
const struct setting_define *defines;
const void *defaults;
};
static struct setting_parser_info mdbox_setting_parser_info = {
+ MEMBER(module_name) "mdbox",
MEMBER(defines) mdbox_setting_defines,
MEMBER(defaults) &mdbox_default_settings,
};
static struct setting_parser_info maildir_setting_parser_info = {
+ MEMBER(module_name) "maildir",
MEMBER(defines) maildir_setting_defines,
MEMBER(defaults) &maildir_default_settings,
};
static struct setting_parser_info mbox_setting_parser_info = {
+ MEMBER(module_name) "mbox",
MEMBER(defines) mbox_setting_defines,
MEMBER(defaults) &mbox_default_settings,
};
struct setting_parser_info mail_storage_setting_parser_info = {
+ MEMBER(module_name) "mail",
MEMBER(defines) mail_storage_setting_defines,
MEMBER(defaults) &mail_storage_default_settings,
};
struct setting_parser_info mail_namespace_setting_parser_info = {
+ MEMBER(module_name) NULL,
MEMBER(defines) mail_namespace_setting_defines,
MEMBER(defaults) &mail_namespace_default_settings,
};
struct setting_parser_info mail_user_setting_parser_info = {
+ MEMBER(module_name) "mail",
MEMBER(defines) mail_user_setting_defines,
MEMBER(defaults) &mail_user_default_settings,
};
struct setting_parser_info lmtp_setting_parser_info = {
+ MEMBER(module_name) "lmtp",
MEMBER(defines) lmtp_setting_defines,
MEMBER(defaults) &lmtp_default_settings,
};
struct setting_parser_info login_setting_parser_info = {
+ MEMBER(module_name) "login",
MEMBER(defines) login_setting_defines,
MEMBER(defaults) &login_default_settings,
};
static struct setting_parser_info file_listener_setting_parser_info = {
+ MEMBER(module_name) NULL,
MEMBER(defines) file_listener_setting_defines,
MEMBER(defaults) &file_listener_default_settings,
};
static struct setting_parser_info inet_listener_setting_parser_info = {
+ MEMBER(module_name) NULL,
MEMBER(defines) inet_listener_setting_defines,
MEMBER(defaults) &inet_listener_default_settings,
};
struct setting_parser_info service_setting_parser_info = {
+ MEMBER(module_name) NULL,
MEMBER(defines) service_setting_defines,
MEMBER(defaults) &service_default_settings,
};
struct setting_parser_info master_setting_parser_info = {
+ MEMBER(module_name) "master",
MEMBER(defines) master_setting_defines,
MEMBER(defaults) &master_default_settings,
};
struct setting_parser_info pop3_setting_parser_info = {
+ MEMBER(module_name) "pop3",
MEMBER(defines) pop3_setting_defines,
MEMBER(defaults) &pop3_default_settings,
};
struct setting_parser_info ssl_params_setting_parser_info = {
+ MEMBER(module_name) "ssl-params",
MEMBER(defines) ssl_params_setting_defines,
MEMBER(defaults) &ssl_params_default_settings,