From: Timo Sirainen Date: Tue, 20 Oct 2009 21:36:06 +0000 (-0400) Subject: struct setting_parser_info now specifies the module name. X-Git-Tag: 2.0.alpha2~56 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1cfdcb36985904eff281fc6d7ea2d13b3c375980;p=thirdparty%2Fdovecot%2Fcore.git struct setting_parser_info now specifies the module name. --HG-- branch : HEAD --- diff --git a/src/auth/auth-settings.c b/src/auth/auth-settings.c index 74ba8a0d18..e4bf590e88 100644 --- a/src/auth/auth-settings.c +++ b/src/auth/auth-settings.c @@ -26,6 +26,7 @@ static struct setting_define auth_passdb_setting_defines[] = { }; struct setting_parser_info auth_passdb_setting_parser_info = { + MEMBER(module_name) NULL, MEMBER(defines) auth_passdb_setting_defines, MEMBER(defaults) NULL, @@ -48,6 +49,7 @@ static struct setting_define auth_userdb_setting_defines[] = { }; struct setting_parser_info auth_userdb_setting_parser_info = { + MEMBER(module_name) NULL, MEMBER(defines) auth_userdb_setting_defines, MEMBER(defaults) NULL, @@ -129,6 +131,7 @@ static struct auth_settings auth_default_settings = { }; struct setting_parser_info auth_setting_parser_info = { + MEMBER(module_name) "auth", MEMBER(defines) auth_setting_defines, MEMBER(defaults) &auth_default_settings, diff --git a/src/config/all-settings.h b/src/config/all-settings.h index d04335a764..4e5a1fe666 100644 --- a/src/config/all-settings.h +++ b/src/config/all-settings.h @@ -1,10 +1,6 @@ #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 diff --git a/src/config/config-filter.c b/src/config/config-filter.c index 9843f6d53b..0ae0be68f4 100644 --- a/src/config/config-filter.c +++ b/src/config/config-filter.c @@ -148,7 +148,7 @@ config_module_parser_apply_changes(struct config_module_parser *dest, { 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) { @@ -175,7 +175,7 @@ int config_filter_parsers_get(struct config_filter_context *ctx, pool_t pool, /* 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]; @@ -206,6 +206,6 @@ void config_filter_parsers_free(struct config_module_parser *parsers) { 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); } diff --git a/src/config/config-parser.c b/src/config/config-parser.c index f30f15638f..1683059c88 100644 --- a/src/config/config-parser.c +++ b/src/config/config-parser.c @@ -27,7 +27,7 @@ struct config_section_stack { 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; }; @@ -106,7 +106,7 @@ config_apply_line(struct parser_context *ctx, const char *key, 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; @@ -146,13 +146,12 @@ config_module_parsers_init(pool_t pool) 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; @@ -266,7 +265,7 @@ config_filter_parser_check(struct parser_context *ctx, 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; @@ -589,14 +588,13 @@ int config_parse_file(const char *path, bool expand_files, 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); } diff --git a/src/config/config-parser.h b/src/config/config-parser.h index 03855b3e55..800c81d9d8 100644 --- a/src/config/config-parser.h +++ b/src/config/config-parser.h @@ -2,8 +2,7 @@ #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; }; diff --git a/src/config/config-request.c b/src/config/config-request.c index 90074fd77e..55644d0abc 100644 --- a/src/config/config-request.c +++ b/src/config/config-request.c @@ -22,10 +22,11 @@ struct settings_export_context { 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. */ @@ -51,15 +52,15 @@ config_module_parser_is_in_service(const struct config_module_parser *list, { 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 @@ -260,7 +261,7 @@ int config_request_handle(const struct config_filter *filter, 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)) diff --git a/src/config/doveconf.c b/src/config/doveconf.c index 5872a3e40b..fff0005cae 100644 --- a/src/config/doveconf.c +++ b/src/config/doveconf.c @@ -188,8 +188,8 @@ static const char *get_mail_location(void) 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); diff --git a/src/config/settings-get.pl b/src/config/settings-get.pl index c2d200ac62..b91d1ef1eb 100755 --- a/src/config/settings-get.pl +++ b/src/config/settings-get.pl @@ -22,6 +22,7 @@ foreach my $file (@ARGV) { my $externs = ""; my $code = ""; my %funcs; + my $cur_name = ""; while (<$f>) { my $write = 0; @@ -32,8 +33,7 @@ foreach my $file (@ARGV) { $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 (/\/\* \*\//) { @@ -55,6 +55,9 @@ foreach my $file (@ARGV) { if ($state == 1 || $state == 3) { if ($state == 1) { + if (/MEMBER\(module_name\) "(.*)"/) { + $parsers{$cur_name} = $1; + } if (/DEFLIST.*".*",(.*)$/) { my $value = $1; if ($value =~ /.*&(.*)\)/) { @@ -87,15 +90,12 @@ foreach my $file (@ARGV) { 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"; diff --git a/src/dict/dict-settings.c b/src/dict/dict-settings.c index aa7d87c93a..07c074346d 100644 --- a/src/dict/dict-settings.c +++ b/src/dict/dict-settings.c @@ -23,6 +23,7 @@ struct dict_settings dict_default_settings = { }; struct setting_parser_info dict_setting_parser_info = { + MEMBER(module_name) "dict", MEMBER(defines) dict_setting_defines, MEMBER(defaults) &dict_default_settings, diff --git a/src/imap/imap-settings.c b/src/imap/imap-settings.c index beddf14baa..86204b9fa1 100644 --- a/src/imap/imap-settings.c +++ b/src/imap/imap-settings.c @@ -56,6 +56,7 @@ static struct setting_parser_info *imap_setting_dependencies[] = { }; struct setting_parser_info imap_setting_parser_info = { + MEMBER(module_name) "imap", MEMBER(defines) imap_setting_defines, MEMBER(defaults) &imap_default_settings, diff --git a/src/lib-lda/lda-settings.c b/src/lib-lda/lda-settings.c index f73b442536..3536ee8667 100644 --- a/src/lib-lda/lda-settings.c +++ b/src/lib-lda/lda-settings.c @@ -49,6 +49,7 @@ static struct setting_parser_info *lda_setting_dependencies[] = { }; struct setting_parser_info lda_setting_parser_info = { + MEMBER(module_name) "lda", MEMBER(defines) lda_setting_defines, MEMBER(defaults) &lda_default_settings, diff --git a/src/lib-master/master-service-settings.c b/src/lib-master/master-service-settings.c index 5c6d91f7a2..b26713d10f 100644 --- a/src/lib-master/master-service-settings.c +++ b/src/lib-master/master-service-settings.c @@ -45,6 +45,7 @@ static struct master_service_settings master_service_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, diff --git a/src/lib-settings/settings-parser.c b/src/lib-settings/settings-parser.c index 5a99c49be0..139335a702 100644 --- a/src/lib-settings/settings-parser.c +++ b/src/lib-settings/settings-parser.c @@ -51,6 +51,7 @@ struct setting_parser_context { }; static const struct setting_parser_info strlist_info = { + MEMBER(module_name) NULL, MEMBER(defines) NULL, MEMBER(defaults) NULL, diff --git a/src/lib-settings/settings-parser.h b/src/lib-settings/settings-parser.h index aa6bf68c5e..f84e1466de 100644 --- a/src/lib-settings/settings-parser.h +++ b/src/lib-settings/settings-parser.h @@ -50,6 +50,7 @@ struct setting_define { #name, offsetof(struct struct_name, name), NULL } struct setting_parser_info { + const char *module_name; const struct setting_define *defines; const void *defaults; diff --git a/src/lib-storage/index/dbox-multi/mdbox-settings.c b/src/lib-storage/index/dbox-multi/mdbox-settings.c index 83210a0635..f4cdb05044 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-settings.c +++ b/src/lib-storage/index/dbox-multi/mdbox-settings.c @@ -33,6 +33,7 @@ static struct mdbox_settings mdbox_default_settings = { }; static struct setting_parser_info mdbox_setting_parser_info = { + MEMBER(module_name) "mdbox", MEMBER(defines) mdbox_setting_defines, MEMBER(defaults) &mdbox_default_settings, diff --git a/src/lib-storage/index/maildir/maildir-settings.c b/src/lib-storage/index/maildir/maildir-settings.c index 6b2a902cad..7f218e14db 100644 --- a/src/lib-storage/index/maildir/maildir-settings.c +++ b/src/lib-storage/index/maildir/maildir-settings.c @@ -28,6 +28,7 @@ static struct maildir_settings maildir_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, diff --git a/src/lib-storage/index/mbox/mbox-settings.c b/src/lib-storage/index/mbox/mbox-settings.c index 42fe30aaf2..dcaa11a9d6 100644 --- a/src/lib-storage/index/mbox/mbox-settings.c +++ b/src/lib-storage/index/mbox/mbox-settings.c @@ -36,6 +36,7 @@ static struct mbox_settings mbox_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, diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c index a5bce70396..94952545a9 100644 --- a/src/lib-storage/mail-storage-settings.c +++ b/src/lib-storage/mail-storage-settings.c @@ -65,6 +65,7 @@ struct mail_storage_settings mail_storage_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, @@ -110,6 +111,7 @@ struct mail_namespace_settings mail_namespace_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, @@ -185,6 +187,7 @@ static struct mail_user_settings mail_user_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, diff --git a/src/lmtp/lmtp-settings.c b/src/lmtp/lmtp-settings.c index 3710b375a9..b69833cbb4 100644 --- a/src/lmtp/lmtp-settings.c +++ b/src/lmtp/lmtp-settings.c @@ -23,6 +23,7 @@ static struct lmtp_settings lmtp_default_settings = { }; struct setting_parser_info lmtp_setting_parser_info = { + MEMBER(module_name) "lmtp", MEMBER(defines) lmtp_setting_defines, MEMBER(defaults) &lmtp_default_settings, diff --git a/src/login-common/login-settings.c b/src/login-common/login-settings.c index a27e02a8cd..5bd96fc978 100644 --- a/src/login-common/login-settings.c +++ b/src/login-common/login-settings.c @@ -71,6 +71,7 @@ static struct login_settings login_default_settings = { }; struct setting_parser_info login_setting_parser_info = { + MEMBER(module_name) "login", MEMBER(defines) login_setting_defines, MEMBER(defaults) &login_default_settings, diff --git a/src/master/master-settings.c b/src/master/master-settings.c index 6c74d5ec14..c29a748cef 100644 --- a/src/master/master-settings.c +++ b/src/master/master-settings.c @@ -43,6 +43,7 @@ static struct file_listener_settings file_listener_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, @@ -72,6 +73,7 @@ static struct inet_listener_settings inet_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, @@ -145,6 +147,7 @@ static struct service_settings service_default_settings = { }; struct setting_parser_info service_setting_parser_info = { + MEMBER(module_name) NULL, MEMBER(defines) service_setting_defines, MEMBER(defaults) &service_default_settings, @@ -211,6 +214,7 @@ static struct master_settings master_default_settings = { }; struct setting_parser_info master_setting_parser_info = { + MEMBER(module_name) "master", MEMBER(defines) master_setting_defines, MEMBER(defaults) &master_default_settings, diff --git a/src/pop3/pop3-settings.c b/src/pop3/pop3-settings.c index 0ee652a8f9..e9f18e76e4 100644 --- a/src/pop3/pop3-settings.c +++ b/src/pop3/pop3-settings.c @@ -53,6 +53,7 @@ static struct setting_parser_info *pop3_setting_dependencies[] = { }; struct setting_parser_info pop3_setting_parser_info = { + MEMBER(module_name) "pop3", MEMBER(defines) pop3_setting_defines, MEMBER(defaults) &pop3_default_settings, diff --git a/src/ssl-params/ssl-params-settings.c b/src/ssl-params/ssl-params-settings.c index 60f8414802..2c5688cf98 100644 --- a/src/ssl-params/ssl-params-settings.c +++ b/src/ssl-params/ssl-params-settings.c @@ -24,6 +24,7 @@ static struct ssl_params_settings ssl_params_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,