projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gui: Fix temporary filtering by a variable's value.
[pspp]
/
src
/
data
/
dictionary.c
diff --git
a/src/data/dictionary.c
b/src/data/dictionary.c
index 79d36374fc42767660234911ed533c5732270b92..4a0afc73d312ab1fac54d061771a1e2cbf174170 100644
(file)
--- a/
src/data/dictionary.c
+++ b/
src/data/dictionary.c
@@
-87,16
+87,6
@@
struct dictionary
static void dict_unset_split_var (struct dictionary *, struct variable *);
static void dict_unset_mrset_var (struct dictionary *, struct variable *);
static void dict_unset_split_var (struct dictionary *, struct variable *);
static void dict_unset_mrset_var (struct dictionary *, struct variable *);
-void
-dict_set_encoding (struct dictionary *d, const char *enc)
-{
- if (enc)
- {
- free (d->encoding);
- d->encoding = xstrdup (enc);
- }
-}
-
const char *
dict_get_encoding (const struct dictionary *d)
{
const char *
dict_get_encoding (const struct dictionary *d)
{
@@
-171,14
+161,16
@@
dict_copy_callbacks (struct dictionary *dest,
dest->cb_data = src->cb_data;
}
dest->cb_data = src->cb_data;
}
-/* Creates and returns a new dictionary. */
+/* Creates and returns a new dictionary
with the specified ENCODING
. */
struct dictionary *
struct dictionary *
-dict_create (
void
)
+dict_create (
const char *encoding
)
{
struct dictionary *d = xzalloc (sizeof *d);
{
struct dictionary *d = xzalloc (sizeof *d);
+ d->encoding = xstrdup (encoding);
hmap_init (&d->name_map);
attrset_init (&d->attributes);
hmap_init (&d->name_map);
attrset_init (&d->attributes);
+
return d;
}
return d;
}
@@
-189,14
+181,21
@@
dict_create (void)
dictionary. If the new dictionary won't be used to access
cases produced with the old dictionary, then the new
dictionary's case indexes should be compacted with
dictionary. If the new dictionary won't be used to access
cases produced with the old dictionary, then the new
dictionary's case indexes should be compacted with
- dict_compact_values to save space. */
+ dict_compact_values to save space.
+
+ Callbacks are not cloned. */
struct dictionary *
dict_clone (const struct dictionary *s)
{
struct dictionary *d;
size_t i;
struct dictionary *
dict_clone (const struct dictionary *s)
{
struct dictionary *d;
size_t i;
- d = dict_create ();
+ d = dict_create (s->encoding);
+
+ /* Set the new dictionary's encoding early so that string length limitations
+ are interpreted correctly. */
+ if ( s->encoding)
+ d->encoding = xstrdup (s->encoding);
for (i = 0; i < s->var_cnt; i++)
{
for (i = 0; i < s->var_cnt; i++)
{
@@
-235,9
+234,6
@@
dict_clone (const struct dictionary *s)
for (i = 0; i < s->vector_cnt; i++)
d->vector[i] = vector_clone (s->vector[i], s, d);
for (i = 0; i < s->vector_cnt; i++)
d->vector[i] = vector_clone (s->vector[i], s, d);
- if ( s->encoding)
- d->encoding = xstrdup (s->encoding);
-
dict_set_attributes (d, dict_get_attributes (s));
for (i = 0; i < s->n_mrsets; i++)
dict_set_attributes (d, dict_get_attributes (s));
for (i = 0; i < s->n_mrsets; i++)
@@
-588,7
+584,7
@@
reindex_vars (struct dictionary *d, size_t from, size_t to)
/* Deletes variable V from dictionary D and frees V.
This is a very bad idea if there might be any pointers to V
/* Deletes variable V from dictionary D and frees V.
This is a very bad idea if there might be any pointers to V
- from outside D. In general, no variable in the active
file
's
+ from outside D. In general, no variable in the active
dataset
's
dictionary should be deleted when any transformations are
active on the dictionary's dataset, because those
transformations might reference the deleted variable. The
dictionary should be deleted when any transformations are
active on the dictionary's dataset, because those
transformations might reference the deleted variable. The
@@
-1658,7
+1654,7
@@
struct variable *
dict_create_internal_var (int case_idx, int width)
{
if (internal_dict == NULL)
dict_create_internal_var (int case_idx, int width)
{
if (internal_dict == NULL)
- internal_dict = dict_create ();
+ internal_dict = dict_create (
"UTF-8"
);
for (;;)
{
for (;;)
{