Only free comments and line buffer once we reach the first level. (issue #8678 reported by ssokol, fixed by anthonyl)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@49551 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Joshua Colp
2007-01-04 22:28:29 +00:00
parent 24bb7d865e
commit 3d460e5a68

View File

@@ -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;