X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fxforms%2Frecode.c;h=5cfad0ed766ec2376429c32b3dc1bbb83e212271;hb=90cc746da3d96887772567a1dbff2a81efb17b21;hp=8c44e14697e2804ffd4fdf8a839dcc27c3e2a87b;hpb=774441e68b4d2e3a4b5c6975e9614dcd4369955e;p=pspp-builds.git diff --git a/src/language/xforms/recode.c b/src/language/xforms/recode.c index 8c44e146..5cfad0ed 100644 --- a/src/language/xforms/recode.c +++ b/src/language/xforms/recode.c @@ -159,6 +159,7 @@ cmd_recode (struct lexer *lexer, struct dataset *ds) /* Create destination variables, if needed. This must be the final step; otherwise we'd have to delete destination variables on failure. */ + trns->dst_dict = dataset_dict (ds); if (trns->src_vars != trns->dst_vars) create_dst_vars (trns, dataset_dict (ds)); @@ -545,8 +546,6 @@ create_dst_vars (struct recode_trns *trns, struct dictionary *dict) { size_t i; - trns->dst_dict = dict; - for (i = 0; i < trns->var_cnt; i++) { const struct variable **var = &trns->dst_vars[i]; @@ -608,8 +607,9 @@ static const struct map_out * find_src_string (struct recode_trns *trns, const uint8_t *value, const struct variable *src_var) { - struct mapping *m; + const char *encoding = dict_get_encoding (trns->dst_dict); int width = var_get_width (src_var); + struct mapping *m; for (m = trns->mappings; m < trns->mappings + trns->map_cnt; m++) { @@ -629,12 +629,13 @@ find_src_string (struct recode_trns *trns, const uint8_t *value, case MAP_CONVERT: { union value uv; + char *error; + + error = data_in (ss_buffer (CHAR_CAST_BUG (char *, value), width), + LEGACY_NATIVE, FMT_F, &uv, 0, encoding); + match = error == NULL; + free (error); - msg_disable (); - match = data_in (ss_buffer (CHAR_CAST_BUG (char *, value), width), - LEGACY_NATIVE, FMT_F, 0, 0, 0, trns->dst_dict, - &uv, 0); - msg_enable (); out->value.f = uv.f; break; }