Commit 2c8a3c31 authored by Józef Kucia's avatar Józef Kucia Committed by Alexandre Julliard

wpp: Fix a few memory leaks in the wpp_parse() function.

parent d574e794
...@@ -49,6 +49,16 @@ static void add_cmdline_defines(void) ...@@ -49,6 +49,16 @@ static void add_cmdline_defines(void)
} }
} }
static void del_cmdline_defines(void)
{
struct define *def;
for (def = cmdline_defines; def; def = def->next)
{
if (def->value) pp_del_define( def->name );
}
}
static void add_special_defines(void) static void add_special_defines(void)
{ {
time_t now = time(NULL); time_t now = time(NULL);
...@@ -70,6 +80,14 @@ static void add_special_defines(void) ...@@ -70,6 +80,14 @@ static void add_special_defines(void)
ppp->type = def_special; ppp->type = def_special;
} }
static void del_special_defines(void)
{
pp_del_define( "__DATE__" );
pp_del_define( "__TIME__" );
pp_del_define( "__FILE__" );
pp_del_define( "__LINE__" );
}
/* add a define to the preprocessor list */ /* add a define to the preprocessor list */
int wpp_add_define( const char *name, const char *value ) int wpp_add_define( const char *name, const char *value )
...@@ -182,6 +200,8 @@ int wpp_parse( const char *input, FILE *output ) ...@@ -182,6 +200,8 @@ int wpp_parse( const char *input, FILE *output )
else if (!(pp_status.file = wpp_callbacks->open(input, 1))) else if (!(pp_status.file = wpp_callbacks->open(input, 1)))
{ {
ppy_error("Could not open %s\n", input); ppy_error("Could not open %s\n", input);
del_special_defines();
del_cmdline_defines();
pp_pop_define_state(); pp_pop_define_state();
return 2; return 2;
} }
...@@ -198,6 +218,8 @@ int wpp_parse( const char *input, FILE *output ) ...@@ -198,6 +218,8 @@ int wpp_parse( const char *input, FILE *output )
if (input) wpp_callbacks->close(pp_status.file); if (input) wpp_callbacks->close(pp_status.file);
/* Clean if_stack, it could remain dirty on errors */ /* Clean if_stack, it could remain dirty on errors */
while (pp_get_if_depth()) pp_pop_if(); while (pp_get_if_depth()) pp_pop_if();
del_special_defines();
del_cmdline_defines();
pp_pop_define_state(); pp_pop_define_state();
return ret; return ret;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment