X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fdictionary.c;h=0f3e25e3285d0ac76fe6814c1a29436ed5ac196c;hb=2ad5fe55e454b8ccb271a710e2c4b1b53c57fc8c;hp=32e9840b0692025b419b4ef473893621245b004e;hpb=9f087e7aa4cdff1d5d46d5e188c0017a9d2d0029;p=pspp diff --git a/src/data/dictionary.c b/src/data/dictionary.c index 32e9840b06..0f3e25e328 100644 --- a/src/data/dictionary.c +++ b/src/data/dictionary.c @@ -135,6 +135,8 @@ dict_clone (const struct dictionary *s) 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 @@ dict_clone (const struct dictionary *s) 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 @@ dict_lookup_var (const struct dictionary *d, const char *name) 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 @@ dict_var_changed (const struct variable *v) 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);