Remove erroneously commited diagnostic statement
[pspp-builds.git] / perl-module / PSPP.xs
index 13386588b62c9738a6346a758717da61937cdb82..94ca9b01834b9fd968319a75e736c4ecd1ef71be 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,12 +177,11 @@ 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 = malloc (fmt->w);
- memset (s, '\0', fmt->w);
- data_out (&uv, fmt, s);
+ s = data_out (&uv, dict_get_encoding (dict), fmt);
  value_destroy (&uv, var_get_width (var));
  ret = newSVpv (s, fmt->w);
  free (s);
@@ -404,26 +406,27 @@ INIT:
  sv_setpv (errstr, "");
 CODE:
  union value the_value;
+ int width = var_get_width (var);
+ int ok;
 
+ value_init (&the_value, width);
  if ( var_is_numeric (var))
  {
   if ( ! looks_like_number (key))
     {
       sv_setpv (errstr, "Cannot add label with string key to a numeric variable");
+      value_destroy (&the_value, width);
       XSRETURN_IV (0);
     }
   the_value.f = SvNV (key);
  }
  else
  {
-   if ( var_is_long_string (var) )
-     {
-      sv_setpv (errstr, "Cannot add label to a long string variable");
-      XSRETURN_IV (0);
-     }
-  strncpy (the_value.short_string, SvPV_nolen(key), MAX_SHORT_STRING);
+  value_copy_str_rpad (&the_value, width, SvPV_nolen(key), ' ');
  }
- if (! var_add_value_label (var, &the_value, label) )
+ ok = var_add_value_label (var, &the_value, label);
+ value_destroy (&the_value, width);
+ if (!ok)
  {
    sv_setpv (errstr, "Something went wrong");
    XSRETURN_IV (0);