Fixed a whole lot more memory leaks.
[pspp] / src / q2c.c
index 0ffc79f0ea10d4b2356d6f8ce2cc6d3eb6bf9077..1361320491b25a614fb90bc13d5a9c12e89b9aa6 100644 (file)
--- a/src/q2c.c
+++ b/src/q2c.c
@@ -1611,7 +1611,7 @@ dump_subcommand (const subcommand *sbc)
     {
       dump (0, "p->%sv_%s = parse_variable ();",
            st_lower (sbc->prefix), st_lower (sbc->name));
-      dump (1, "if (p->%sv_%s)",
+      dump (1, "if (!p->%sv_%s)",
            st_lower (sbc->prefix), st_lower (sbc->name));
       dump (0, "goto lossage;");
       outdent ();
@@ -2058,11 +2058,17 @@ dump_free (int persistent)
        {
          switch (sbc->type) 
            {
+            case SBC_VARLIST:
+             dump (0, "free (p->v_variables);");
+              break;
            case SBC_STRING:
              dump (0, "free (p->s_%s);", st_lower (sbc->name));
              break;
            case SBC_DBL_LIST:
-             dump (0, "subc_list_double_destroy(p->dl_%s);", st_lower (sbc->name));
+             dump (0, "int i;");
+             dump (1, "for(i = 0; i < MAXLISTS ; ++i)");
+             dump (0, "subc_list_double_destroy(&p->dl_%s[i]);", st_lower (sbc->name));
+             outdent();
              break;
            default:
              break;