dovecot-2.0-sslstream: lib-settings: Initialize block{}s, even i...

dovecot at dovecot.org dovecot at dovecot.org
Sat Feb 13 02:58:37 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0-sslstream/rev/477bd56cdb3e
changeset: 10593: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