dovecot-2.0: lib-settings: Initialize block{}s, even if they don...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Jan 27 23:40:54 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/477bd56cdb3e
changeset: 10592:477bd56cdb3e
user: Timo Sirainen <tss at iki.fi>
date: Wed Jan 27 23:40:50 2010 +0200
description:
lib-settings: Initialize block{}s, even if they don't have anything inside.
For example if there's an empty userdb {}, it should give an error instead
of being silently ignored.
diffstat:
1 file changed, 28 insertions(+), 20 deletions(-)
src/lib-settings/settings-parser.c | 48 +++++++++++++++++++++---------------
diffs (72 lines):
diff -r 379b993c5ca6 -r 477bd56cdb3e src/lib-settings/settings-parser.c
--- a/src/lib-settings/settings-parser.c Wed Jan 27 23:20:05 2010 +0200
+++ b/src/lib-settings/settings-parser.c Wed Jan 27 23:40:50 2010 +0200
@@ -436,6 +436,29 @@ static int get_enum(struct setting_parse
return 0;
}
+static void
+setting_link_init_set_struct(struct setting_parser_context *ctx,
+ struct setting_link *link)
+{
+ void *ptr;
+
+ link->set_struct = p_malloc(ctx->set_pool, link->info->struct_size);
+ if ((ctx->flags & SETTINGS_PARSER_FLAG_TRACK_CHANGES) != 0) {
+ link->change_struct =
+ p_malloc(ctx->set_pool, link->info->struct_size);
+ array_append(link->change_array, &link->change_struct, 1);
+ }
+
+ setting_parser_copy_defaults(ctx, link->info, link);
+ array_append(link->array, &link->set_struct, 1);
+
+ if (link->info->parent_offset != (size_t)-1 && link->parent != NULL) {
+ ptr = STRUCT_MEMBER_P(link->set_struct,
+ link->info->parent_offset);
+ *((void **)ptr) = link->parent->set_struct;
+ }
+}
+
static int setting_link_add(struct setting_parser_context *ctx,
const struct setting_define *def,
const struct setting_link *link_copy, char *key)
@@ -457,6 +480,9 @@ static int setting_link_add(struct setti
*link = *link_copy;
link->full_key = key;
hash_table_insert(ctx->links, key, link);
+
+ if (link->info->struct_size != 0)
+ setting_link_init_set_struct(ctx, link);
return 0;
}
@@ -520,26 +546,8 @@ settings_parse(struct setting_parser_con
ctx->prev_info = link->info;
- if (link->set_struct == NULL) {
- link->set_struct =
- p_malloc(ctx->set_pool, link->info->struct_size);
- if ((ctx->flags & SETTINGS_PARSER_FLAG_TRACK_CHANGES) != 0) {
- link->change_struct = p_malloc(ctx->set_pool,
- link->info->struct_size);
- array_append(link->change_array,
- &link->change_struct, 1);
- }
-
- setting_parser_copy_defaults(ctx, link->info, link);
- array_append(link->array, &link->set_struct, 1);
-
- if (link->info->parent_offset != (size_t)-1 &&
- link->parent != NULL) {
- ptr = STRUCT_MEMBER_P(link->set_struct,
- link->info->parent_offset);
- *((void **)ptr) = link->parent->set_struct;
- }
- }
+ if (link->set_struct == NULL)
+ setting_link_init_set_struct(ctx, link);
change_ptr = link->change_struct == NULL ? NULL :
STRUCT_MEMBER_P(link->change_struct, def->offset);
More information about the dovecot-cvs
mailing list