Fix problem running the perl module
authorJohn Darrington <john@darrington.wattle.id.au>
Tue, 7 Jul 2009 11:24:40 +0000 (19:24 +0800)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 7 Jul 2009 11:24:40 +0000 (19:24 +0800)
perl-module/PSPP.xs
src/libpspp/i18n.c

index e80b3cf22baf01ecd6c63cab928f7230a317a611..d10cc34921ecb1bcfa8e64883657d2c999b0588e 100644 (file)
 #include <data/sys-file-writer.h>
 #include <data/sys-file-reader.h>
 #include <data/value.h>
+#include <data/vardict.h>
 #include <data/value-labels.h>
 #include <data/format.h>
 #include <data/data-in.h>
+#include <data/data-out.h>
 #include <string.h>
 
 typedef struct fmt_spec input_format ;
@@ -163,6 +165,7 @@ onBoot (ver)
  const char *ver
 CODE:
  assert (0 == strcmp (ver, bare_version));
+ i18n_init ();
  msg_init (NULL, message_handler);
  settings_init (0, 0);
  fh_init ();
@@ -174,10 +177,12 @@ format_value (val, var)
 CODE:
  SV *ret;
  const struct fmt_spec *fmt = var_get_print_format (var);
+ const struct dictionary *dict = var_get_vardict (var)->dict;
  union value uv;
  char *s;
  make_value_from_scalar (&uv, val, var);
- s = data_out (&uv, fmt);
+ fprintf (stderr, "Encoding is %s\n", dict_get_encoding (dict));
+ s = data_out (&uv, dict_get_encoding (dict), fmt);
  value_destroy (&uv, var_get_width (var));
  ret = newSVpv (s, fmt->w);
  free (s);
index d443619ac5bc9e6deb39860099dc788d53ab5e6d..e08ba2804bbf4d6b0dbe7c6cf81b820c7a239462 100644 (file)
@@ -94,7 +94,8 @@ recode_string (const char *to, const char *from,
 }
 
 
-/* Return a string based on TEXT converted according to HOW.
+/* Return a string based on TEXT which must be encoded using FROM.
+   The returned string will be encoded in TO.
    If length is not -1, then it must be the number of bytes in TEXT.
    The returned string must be freed when no longer required.
 */
@@ -119,7 +120,6 @@ recode_string_pool (const char *to, const char *from,
   if ( length == -1 )
      length = strlen(text);
 
-
   if (to == NULL)
     to = default_encoding;