The first file should have a blank config filename in the structure, so that
authorTilghman Lesher <tilghman@meg.abyt.es>
Fri, 5 Dec 2008 05:41:41 +0000 (05:41 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Fri, 5 Dec 2008 05:41:41 +0000 (05:41 +0000)
when a save occurs to a different filename, everything goes to the alternate
filename, instead of appending to the original.  This is important for the
AMI command UpdateConfig.
(closes issue #13301)
 Reported by: trevo
 Patches:
       20081113__bug13301.diff.txt uploaded by Corydon76 (license 14)
       20081113__bug13301__1.6.0.diff.txt uploaded by Corydon76 (license 14)
 Tested by: Corydon76, blitzrage

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@161181 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/config.c

index 4cef91a..d6510df 100644 (file)
@@ -953,7 +953,9 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
                if (*c++ != '(')
                        c = NULL;
                catname = cur;
-               if (!(*cat = newcat = ast_category_new(catname, ast_strlen_zero(suggested_include_file)?configfile:suggested_include_file, lineno))) {
+               if (!(*cat = newcat = ast_category_new(catname,
+                               S_OR(suggested_include_file, cfg->include_level == 1 ? "" : configfile),
+                               lineno))) {
                        return -1;
                }
                (*cat)->lineno = lineno;
@@ -1076,7 +1078,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
                }
                /* A #include */
                /* record this inclusion */
-               inclu = ast_include_new(cfg, configfile, cur, !do_include, cur2, lineno, real_inclusion_name, sizeof(real_inclusion_name));
+               inclu = ast_include_new(cfg, cfg->include_level == 1 ? "" : configfile, cur, !do_include, cur2, lineno, real_inclusion_name, sizeof(real_inclusion_name));
 
                do_include = ast_config_internal_load(cur, cfg, flags, real_inclusion_name, who_asked) ? 1 : 0;
                if (!ast_strlen_zero(exec_file))
@@ -1133,7 +1135,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
                                c++;
                        }
 set_new_variable:
-                       if ((v = ast_variable_new(ast_strip(cur), ast_strip(c), S_OR(suggested_include_file, configfile)))) {
+                       if ((v = ast_variable_new(ast_strip(cur), ast_strip(c), S_OR(suggested_include_file, cfg->include_level == 1 ? "" : configfile)))) {
                                v->lineno = lineno;
                                v->object = object;
                                *last_cat = 0;