[asterisk-commits] kmoore: branch 12 r399565 - in /branches/12: ./ main/config_options.c

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


Author: kmoore
Date: Fri Sep 20 17:41:25 2013
New Revision: 399565

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=399565
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/
........

Merged revisions 399564 from http://svn.asterisk.org/svn/asterisk/branches/11

Modified:
    branches/12/   (props changed)
    branches/12/main/config_options.c

Propchange: branches/12/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.

Modified: branches/12/main/config_options.c
URL: http://svnview.digium.com/svn/asterisk/branches/12/main/config_options.c?view=diff&rev=399565&r1=399564&r2=399565
==============================================================================
--- branches/12/main/config_options.c (original)
+++ branches/12/main/config_options.c Fri Sep 20 17:41:25 2013
@@ -478,10 +478,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;
@@ -618,6 +614,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