aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2007-01-04 22:34:24 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2007-01-04 22:34:24 +0000
commit01dbc383ec974206268c918570669fe0a83b9630 (patch)
tree8f7a93c0a3fc095371cd53dc23c04ebcb86ef5a4 /main
parent779a16372f32b2475bd715ba8f81d6a00d757938 (diff)
Merged revisions 49551 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r49551 | file | 2007-01-04 17:28:29 -0500 (Thu, 04 Jan 2007) | 2 lines Only free comments and line buffer once we reach the first level. (issue #8678 reported by ssokol, fixed by anthonyl) ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@49552 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/config.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/main/config.c b/main/config.c
index 00ed17566..7d72e0a4e 100644
--- a/main/config.c
+++ b/main/config.c
@@ -86,6 +86,8 @@ static void CB_INIT(void)
comment_buffer[0] = 0;
comment_buffer_size = CB_INCR;
lline_buffer = ast_malloc(CB_INCR);
+ if (!lline_buffer)
+ return;
lline_buffer[0] = 0;
lline_buffer_size = CB_INCR;
} else {
@@ -127,7 +129,7 @@ static void LLB_ADD(char *str)
int siz = strlen(str);
if (rem < siz+1) {
lline_buffer = ast_realloc(lline_buffer, lline_buffer_size + CB_INCR + siz + 1);
- if (!lline_buffer)
+ if (!lline_buffer)
return;
lline_buffer_size += CB_INCR + siz + 1;
}
@@ -167,6 +169,7 @@ static struct ast_config_engine *config_engine_list;
struct ast_category {
char name[80];
int ignored; /*!< do not let user of the config see this category */
+ int include_level;
struct ast_comment *precomments;
struct ast_comment *sameline;
struct ast_variable *root;
@@ -339,6 +342,7 @@ void ast_category_append(struct ast_config *config, struct ast_category *categor
config->last->next = category;
else
config->root = category;
+ category->include_level = config->include_level;
config->last = category;
config->current = category;
}
@@ -796,8 +800,11 @@ static struct ast_config *config_text_file_load(const char *database, const char
if (withcomments) {
CB_INIT();
+ if (!lline_buffer || !comment_buffer) {
+ ast_log(LOG_ERROR, "Failed to initialize the comment buffer!\n");
+ return NULL;
+ }
}
-
#ifdef AST_INCLUDE_GLOB
{
int glob_ret;
@@ -847,7 +854,8 @@ static struct ast_config *config_text_file_load(const char *database, const char
while(!feof(f)) {
lineno++;
if (fgets(buf, sizeof(buf), f)) {
- if ( withcomments ) {
+ if ( withcomments ) {
+ ast_log(LOG_NOTICE, "moo\n");
CB_ADD(lline_buffer); /* add the current lline buffer to the comment buffer */
lline_buffer[0] = 0; /* erase the lline buffer */
}
@@ -937,16 +945,16 @@ static struct ast_config *config_text_file_load(const char *database, const char
}
}
#endif
- if (withcomments) {
- if (comment_buffer) {
- free(comment_buffer);
- free(lline_buffer);
- comment_buffer=0;
- lline_buffer=0;
- comment_buffer_size=0;
- lline_buffer_size=0;
- }
+
+ if (cfg->include_level == 1 && withcomments && comment_buffer) {
+ free(comment_buffer);
+ free(lline_buffer);
+ comment_buffer = NULL;
+ lline_buffer = NULL;
+ comment_buffer_size = 0;
+ lline_buffer_size = 0;
}
+
if (count == 0)
return NULL;