X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fdictionary.c;h=2d99f6d72cfe2a7e6dc442102f16a4dc687cbe32;hb=dc29c57e7908b0bdc6ab84f8aa4b7cb8a780026c;hp=7d67defbfecfc61fa3f3637ecfbb94c127c4b75a;hpb=7731fa51f095e615975cd53d35ba3cb681b82df1;p=pspp diff --git a/src/data/dictionary.c b/src/data/dictionary.c index 7d67defbfe..2d99f6d72c 100644 --- a/src/data/dictionary.c +++ b/src/data/dictionary.c @@ -87,16 +87,8 @@ struct dictionary 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); - } -} - +/* Returns the encoding for data in dictionary D. The return value is a + nonnull string that contains an IANA character set name. */ const char * dict_get_encoding (const struct dictionary *d) { @@ -171,14 +163,16 @@ dict_copy_callbacks (struct dictionary *dest, dest->cb_data = src->cb_data; } -/* Creates and returns a new dictionary. */ +/* Creates and returns a new dictionary with the specified ENCODING. */ struct dictionary * -dict_create (void) +dict_create (const char *encoding) { struct dictionary *d = xzalloc (sizeof *d); + d->encoding = xstrdup (encoding); hmap_init (&d->name_map); attrset_init (&d->attributes); + return d; } @@ -189,19 +183,20 @@ 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 - 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; - 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); + d->encoding = xstrdup (s->encoding); for (i = 0; i < s->var_cnt; i++) { @@ -1660,7 +1655,7 @@ struct variable * dict_create_internal_var (int case_idx, int width) { if (internal_dict == NULL) - internal_dict = dict_create (); + internal_dict = dict_create ("UTF-8"); for (;;) {