fixed flex parser memory leaks in ipsec starter
This commit is contained in:
@@ -24,7 +24,8 @@
|
|||||||
#define MAX_INCLUDE_DEPTH 20
|
#define MAX_INCLUDE_DEPTH 20
|
||||||
|
|
||||||
extern void yyerror(const char *);
|
extern void yyerror(const char *);
|
||||||
extern int yylex (void);
|
extern int yylex(void);
|
||||||
|
extern int yylex_destroy(void);
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
int stack_ptr;
|
int stack_ptr;
|
||||||
@@ -68,6 +69,7 @@ void _parser_y_fini (void)
|
|||||||
fclose(__parser_y_private.file[i]);
|
fclose(__parser_y_private.file[i]);
|
||||||
}
|
}
|
||||||
memset(&__parser_y_private, 0, sizeof(__parser_y_private));
|
memset(&__parser_y_private, 0, sizeof(__parser_y_private));
|
||||||
|
yylex_destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
int _parser_y_include (const char *filename)
|
int _parser_y_include (const char *filename)
|
||||||
|
|||||||
@@ -156,21 +156,20 @@ statement_kw:
|
|||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
void
|
void yyerror(const char *s)
|
||||||
yyerror(const char *s)
|
|
||||||
{
|
{
|
||||||
if (_save_errors_)
|
if (_save_errors_)
|
||||||
_parser_y_error(parser_errstring, ERRSTRING_LEN, s);
|
_parser_y_error(parser_errstring, ERRSTRING_LEN, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
config_parsed_t *
|
config_parsed_t *parser_load_conf(const char *file)
|
||||||
parser_load_conf(const char *file)
|
|
||||||
{
|
{
|
||||||
config_parsed_t *cfg = NULL;
|
config_parsed_t *cfg = NULL;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
extern void _parser_y_init (const char *f);
|
extern void _parser_y_init(const char *f);
|
||||||
|
extern void _parser_y_fini(void);
|
||||||
extern FILE *yyin;
|
extern FILE *yyin;
|
||||||
|
|
||||||
memset(parser_errstring, 0, ERRSTRING_LEN+1);
|
memset(parser_errstring, 0, ERRSTRING_LEN+1);
|
||||||
@@ -231,11 +230,11 @@ parser_load_conf(const char *file)
|
|||||||
cfg = NULL;
|
cfg = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_parser_y_fini();
|
||||||
return cfg;
|
return cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void parser_free_kwlist(kw_list_t *list)
|
||||||
parser_free_kwlist(kw_list_t *list)
|
|
||||||
{
|
{
|
||||||
kw_list_t *elt;
|
kw_list_t *elt;
|
||||||
|
|
||||||
@@ -248,8 +247,7 @@ parser_free_kwlist(kw_list_t *list)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void parser_free_conf(config_parsed_t *cfg)
|
||||||
parser_free_conf(config_parsed_t *cfg)
|
|
||||||
{
|
{
|
||||||
section_list_t *sec;
|
section_list_t *sec;
|
||||||
if (cfg)
|
if (cfg)
|
||||||
|
|||||||
Reference in New Issue
Block a user