[asterisk-commits] kmoore: branch 11 r399564 - /branches/11/main/config_options.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Sep 20 17:35:05 CDT 2013


Author: kmoore
Date: Fri Sep 20 17:35:00 2013
New Revision: 399564

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=399564
Log:
Ensure global types in the config framework are initialized

If a config object was allocated but one of its global objects was
never encountered, then the global object's defaults were never
applied. Ensure that global objects are initialized properly upon
allocation instead of on configuration.

Review: https://reviewboard.asterisk.org/r/2866/

Modified:
    branches/11/main/config_options.c

Modified: branches/11/main/config_options.c
URL: http://svnview.digium.com/svn/asterisk/branches/11/main/config_options.c?view=diff&rev=399564&r1=399563&r2=399564
==============================================================================
--- branches/11/main/config_options.c (original)
+++ branches/11/main/config_options.c Fri Sep 20 17:35:00 2013
@@ -370,10 +370,6 @@
 	}
 
 	if (type->type == ACO_GLOBAL && *field) {
-		if (aco_set_defaults(type, cat, *field)) {
-			ast_log(LOG_ERROR, "In %s: Setting defaults for %s failed\n", file->filename, cat);
-			return -1;
-		}
 		if (aco_process_category_options(type, cfg, cat, *field)) {
 			ast_log(LOG_ERROR, "In %s: Processing options for %s failed\n", file->filename, cat);
 			return -1;
@@ -504,6 +500,28 @@
 
 	while (res != ACO_PROCESS_ERROR && (file = info->files[x++])) {
 		const char *filename = file->filename;
+		struct aco_type *match;
+		int i;
+
+		/* set defaults for global objects */
+		for (i = 0, match = file->types[i]; match; match = file->types[++i]) {
+			void **field = info->internal->pending + match->item_offset;
+
+			if (match->type != ACO_GLOBAL || !*field) {
+				continue;
+			}
+
+			if (aco_set_defaults(match, match->category, *field)) {
+				ast_log(LOG_ERROR, "In %s: Setting defaults for %s failed\n", file->filename, match->category);
+				res = ACO_PROCESS_ERROR;
+				break;
+			}
+		}
+
+		if (res == ACO_PROCESS_ERROR) {
+			break;
+		}
+
 try_alias:
 		if (!(cfg = ast_config_load(filename, cfg_flags))) {
 			if (file->alias && strcmp(file->alias, filename)) {




More information about the asterisk-commits mailing list