X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fdata-out.c;h=94a6130adb154bd06b61901414e4209498cbf106;hb=2b77d6273ba47af3020a827d48d0ff3330d76ba5;hp=7f15e5b24a8a42caafe8ad48d5dd809b467d1cd6;hpb=f15c854d8500105766b2f5666bb62b983ff24f88;p=pspp-builds.git diff --git a/src/data/data-out.c b/src/data/data-out.c index 7f15e5b2..94a6130a 100644 --- a/src/data/data-out.c +++ b/src/data/data-out.c @@ -37,6 +37,7 @@ #include #include #include +#include #include "minmax.h" @@ -105,35 +106,47 @@ data_out_legacy (const union value *input, const char *encoding, converters[format->type] (input, format, output); if (0 != strcmp (encoding, LEGACY_NATIVE) && fmt_get_category (format->type) != FMT_CAT_BINARY) - legacy_recode (LEGACY_NATIVE, output, encoding, output, format->w); + { + char *s = recode_string (encoding, LEGACY_NATIVE, output, format->w ); + memcpy (output, s, format->w); + free (s); + } } -/* Converts the INPUT value into printable form, according to format - specification FORMAT. +/* Converts the INPUT value into a UTF8 encoded string, according + to format specification FORMAT. VALUE must be the correct width for FORMAT, that is, its width must be fmt_var_width(FORMAT). + ENCODING must be the encoding of INPUT. Normally this can + be obtained by calling dict_get_encoding on the dictionary + with which INPUT is associated. + The return value is dynamically allocated, and must be freed by the caller. If POOL is non-null, then the return value is allocated on that pool. */ char * -data_out_pool (const union value *input, const struct fmt_spec *format, - struct pool *pool) +data_out_pool (const union value *input, const char *encoding, + const struct fmt_spec *format, struct pool *pool) { - char *output = pool_malloc (pool, format->w + 1); + char *output = xmalloc (format->w + 1); + char *t ; assert (fmt_check_output (format)); converters[format->type] (input, format, output); output[format->w] = '\0'; - return output; + + t = recode_string_pool (UTF8, encoding, output, format->w, pool); + free (output); + return t; } char * -data_out (const union value *input, const struct fmt_spec *format) +data_out (const union value *input, const char *encoding, const struct fmt_spec *format) { - return data_out_pool (input, format, NULL); + return data_out_pool (input, encoding, format, NULL); }