Convert to utf8 in data_out function.
[pspp-builds.git] / src / data / data-out.c
index 7f15e5b24a8a42caafe8ad48d5dd809b467d1cd6..4c6ca3dd3ceaa223217c021e3d45ade44caa2507 100644 (file)
@@ -37,6 +37,7 @@
 #include <libpspp/misc.h>
 #include <libpspp/str.h>
 #include <libpspp/pool.h>
 #include <libpspp/misc.h>
 #include <libpspp/str.h>
 #include <libpspp/pool.h>
+#include <libpspp/i18n.h>
 
 #include "minmax.h"
 
 
 #include "minmax.h"
 
@@ -108,7 +109,7 @@ data_out_legacy (const union value *input, const char *encoding,
     legacy_recode (LEGACY_NATIVE, output, encoding, output, format->w);
 }
 
     legacy_recode (LEGACY_NATIVE, output, encoding, output, format->w);
 }
 
-/* Converts the INPUT value into printable form, according to 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
    specification FORMAT. 
 
    VALUE must be the correct width for FORMAT, that is, its
@@ -119,21 +120,25 @@ data_out_legacy (const union value *input, const char *encoding,
    allocated on that pool.
 */
 char *
    allocated on that pool.
 */
 char *
-data_out_pool (const union value *input, const struct fmt_spec *format,
+data_out_pool (const union value *input, const char *encoding, const struct fmt_spec *format,
          struct pool *pool)
 {
          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';
   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 *
 }
 
 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);
 }
 
 \f
 }
 
 \f