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

Józef Kucia joseph.kucia at gmail.com
Sun Mar 25 08:53:31 CDT 2012


This patch fixes some of valgrind warnings mentioned in bug 25957.
---
 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;
 }
-- 
1.7.8.5




More information about the wine-patches mailing list