wpp: Fix a few memory leaks in the wpp_parse() function.
diff --git a/libs/wpp/wpp.c b/libs/wpp/wpp.c index 0c9c808..66eb026 100644 --- a/libs/wpp/wpp.c +++ b/libs/wpp/wpp.c
@@ -49,6 +49,16 @@ } } +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) { time_t now = time(NULL); @@ -70,6 +80,14 @@ 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 */ int wpp_add_define( const char *name, const char *value ) @@ -182,6 +200,8 @@ else if (!(pp_status.file = wpp_callbacks->open(input, 1))) { ppy_error("Could not open %s\n", input); + del_special_defines(); + del_cmdline_defines(); pp_pop_define_state(); return 2; } @@ -198,6 +218,8 @@ if (input) wpp_callbacks->close(pp_status.file); /* Clean if_stack, it could remain dirty on errors */ while (pp_get_if_depth()) pp_pop_if(); + del_special_defines(); + del_cmdline_defines(); pp_pop_define_state(); return ret; }