pspp-cvs
[Top][All Lists]
Advanced

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

[Pspp-cvs] pspp/src/data ChangeLog dictionary.c


From: John Darrington
Subject: [Pspp-cvs] pspp/src/data ChangeLog dictionary.c
Date: Sat, 27 Oct 2007 07:12:41 +0000

CVSROOT:        /sources/pspp
Module name:    pspp
Changes by:     John Darrington <jmd>   07/10/27 07:12:41

Modified files:
        src/data       : ChangeLog dictionary.c 

Log message:
        Fixed bugs #21397 and 21330

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/ChangeLog?cvsroot=pspp&r1=1.163&r2=1.164
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/dictionary.c?cvsroot=pspp&r1=1.48&r2=1.49

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/pspp/pspp/src/data/ChangeLog,v
retrieving revision 1.163
retrieving revision 1.164
diff -u -b -r1.163 -r1.164
--- ChangeLog   9 Oct 2007 03:50:20 -0000       1.163
+++ ChangeLog   27 Oct 2007 07:12:40 -0000      1.164
@@ -1,3 +1,9 @@
+2007-10-27  John Darrington <address@hidden>
+
+       * dictionary.c: Fixed bug in dict_clone, where the vardict.dict member
+       wasn't initialised correctly. Closes bugs #21330 and 21397
+
+
 2007-10-08  Ben Pfaff  <address@hidden>
 
        Fix bug #21280.  Thanks to John Darrington for review.

Index: dictionary.c
===================================================================
RCS file: /sources/pspp/pspp/src/data/dictionary.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -b -r1.48 -r1.49
--- dictionary.c        12 Oct 2007 04:59:26 -0000      1.48
+++ dictionary.c        27 Oct 2007 07:12:40 -0000      1.49
@@ -135,6 +135,8 @@
 
   for (i = 0; i < s->var_cnt; i++)
     {
+      const struct vardict_info *svdi;
+      struct vardict_info dvdi;
       struct variable *sv = s->var[i];
       struct variable *dv = dict_clone_var_assert (d, sv, var_get_name (sv));
       size_t i;
@@ -142,7 +144,10 @@
       for (i = 0; i < var_get_short_name_cnt (sv); i++)
         var_set_short_name (dv, i, var_get_short_name (sv, i));
 
-      var_set_vardict (dv, var_get_vardict (sv));
+      svdi = var_get_vardict (sv);
+      dvdi = *svdi;
+      dvdi.dict = d;
+      var_set_vardict (dv, &dvdi);
     }
 
   d->next_value_idx = s->next_value_idx;
@@ -388,6 +393,12 @@
   result = hsh_find (d->name_tab, target);
   var_destroy (target);
 
+  if ( result && var_has_vardict (result)) 
+  {
+      const struct vardict_info *vdi = var_get_vardict (result);
+      assert (vdi->dict == d);
+  }
+
   return result;
 }
 
@@ -1161,9 +1172,7 @@
   if ( var_has_vardict (v))
     {
       const struct vardict_info *vdi = var_get_vardict (v);
-      struct dictionary *d;
-
-      d = vdi->dict;
+      struct dictionary *d = vdi->dict;
 
       if ( d->callbacks && d->callbacks->var_changed )
        d->callbacks->var_changed (d, var_get_dict_index (v), d->cb_data);




reply via email to

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