pspp-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pspp-cvs] pspp/src/data dictionary.c sys-file-reader.c va...


From: John Darrington
Subject: [Pspp-cvs] pspp/src/data dictionary.c sys-file-reader.c va...
Date: Mon, 27 Aug 2007 07:02:35 +0000

CVSROOT:        /sources/pspp
Module name:    pspp
Changes by:     John Darrington <jmd>   07/08/27 07:02:35

Modified files:
        src/data       : dictionary.c sys-file-reader.c variable.c 

Log message:
        Plugged some more memory leaks.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/dictionary.c?cvsroot=pspp&r1=1.45&r2=1.46
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/sys-file-reader.c?cvsroot=pspp&r1=1.45&r2=1.46
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/variable.c?cvsroot=pspp&r1=1.30&r2=1.31

Patches:
Index: dictionary.c
===================================================================
RCS file: /sources/pspp/pspp/src/data/dictionary.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -b -r1.45 -r1.46
--- dictionary.c        14 Aug 2007 06:22:38 -0000      1.45
+++ dictionary.c        27 Aug 2007 07:02:35 -0000      1.46
@@ -176,20 +176,7 @@
 
   while (d->var_cnt > 0 )
     {
-      struct variable *v = d->var[d->var_cnt - 1];
-      int dict_index = var_get_dict_index (v);
-      int case_index = var_get_case_index (v);
-      int val_cnt = var_get_value_cnt (v);
-
-      var_clear_vardict (v);
-      var_destroy (v);
-
-      d->var_cnt--;
-
-      if (d->callbacks &&  d->callbacks->var_deleted )
-       d->callbacks->var_deleted (d,
-                                  dict_index, case_index, val_cnt,
-                                  d->cb_data);
+      dict_delete_var (d, d->var[d->var_cnt - 1]);
     }
 
   free (d->var);
@@ -516,6 +503,7 @@
   var_clear_vardict (v);
   var_destroy (v);
 
+
   if (d->callbacks &&  d->callbacks->var_deleted )
     d->callbacks->var_deleted (d, dict_index, case_index, val_cnt, d->cb_data);
 }
@@ -959,8 +947,16 @@
   assert (cnt == 0 || split != NULL);
 
   d->split_cnt = cnt;
-  d->split = cnt > 0 ? xnrealloc (d->split, cnt, sizeof *d->split) : NULL;
+  if ( cnt > 0 )
+   {
+    d->split = xnrealloc (d->split, cnt, sizeof *d->split) ;
   memcpy (d->split, split, cnt * sizeof *d->split);
+   }
+  else
+   {
+    free (d->split);
+    d->split = NULL;
+   }
 
   if ( d->callbacks &&  d->callbacks->split_changed )
     d->callbacks->split_changed (d, d->cb_data);

Index: sys-file-reader.c
===================================================================
RCS file: /sources/pspp/pspp/src/data/sys-file-reader.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -b -r1.45 -r1.46
--- sys-file-reader.c   27 Aug 2007 00:06:23 -0000      1.45
+++ sys-file-reader.c   27 Aug 2007 07:02:35 -0000      1.46
@@ -939,6 +939,7 @@
           var_set_short_name (var, i, short_names[i]);
           free (short_names[i]);
         }
+      free (short_names);
     }
   close_variable_to_value_map (r, map);
   r->has_long_var_names = true;

Index: variable.c
===================================================================
RCS file: /sources/pspp/pspp/src/data/variable.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- variable.c  25 Jul 2007 04:31:34 -0000      1.30
+++ variable.c  27 Aug 2007 07:02:35 -0000      1.31
@@ -173,6 +173,7 @@
     {
       assert (!var_has_vardict (v));
       cat_stored_values_destroy (v->obs_vals);
+      var_clear_short_names (v);
       var_clear_aux (v);
       val_labs_destroy (v->val_labs);
       var_clear_label (v);
@@ -840,7 +841,6 @@
         {
           size_t old_cnt = var->short_name_cnt;
           size_t i;
-          
           var->short_name_cnt = MAX (idx * 2, 1);
           var->short_names = xnrealloc (var->short_names, var->short_name_cnt,
                                         sizeof *var->short_names);
@@ -862,6 +862,7 @@
   
   for (i = 0; i < v->short_name_cnt; i++)
     free (v->short_names[i]);
+  free (v->short_names);
   v->short_names = NULL;
   v->short_name_cnt = 0;
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]