[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