Module: wine Branch: master Commit: 2c8a3c31b732b048a05fcb3e9756b76f9a57e973 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2c8a3c31b732b048a05fcb3e97...
Author: Józef Kucia joseph.kucia@gmail.com Date: Sun Mar 25 15:53:31 2012 +0200
wpp: Fix a few memory leaks in the wpp_parse() function.
---
libs/wpp/wpp.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-)
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 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) { time_t now = time(NULL); @@ -70,6 +80,14 @@ static void add_special_defines(void) 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 @@ int wpp_parse( const char *input, FILE *output ) 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 @@ int wpp_parse( const char *input, FILE *output ) 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; }