X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fsyntax-gen.c;h=b49911f5e8f06fd81a2726a1a0bc67b51e68f558;hb=3da49359c52cb783db907cc197847bbd5e721c97;hp=f063fa3965b4c840b76ec02a91bf08733e85a27a;hpb=729b96a6bd9342c45e6f65a113fd87c70da85b0a;p=pspp diff --git a/src/ui/syntax-gen.c b/src/ui/syntax-gen.c index f063fa3965..b49911f5e8 100644 --- a/src/ui/syntax-gen.c +++ b/src/ui/syntax-gen.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008, 2010 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,13 +21,14 @@ #include #include -#include -#include -#include -#include -#include -#include -#include +#include "data/data-in.h" +#include "data/data-out.h" +#include "data/format.h" +#include "data/value.h" +#include "libpspp/assertion.h" +#include "libpspp/cast.h" +#include "libpspp/message.h" +#include "libpspp/str.h" /* Appends to OUTPUT a pair of hex digits for each byte in IN. */ static void @@ -146,15 +147,18 @@ syntax_gen_number (struct string *output, & (FMT_CAT_DATE | FMT_CAT_TIME | FMT_CAT_DATE_COMPONENT))) { union value v_in, v_out; - char *s; + char *s, *error; bool ok; v_in.f = number; s = data_out (&v_in, "FIXME", format); - msg_disable (); - ok = data_in (ss_cstr (s), LEGACY_NATIVE, - format->type, false, 0, 0, &v_out, 0); - msg_enable (); + + /* FIXME: UTF8 encoded strings will fail here */ + error = data_in (ss_cstr (s), LEGACY_NATIVE, + format->type, &v_out, 0, NULL); + ok = error == NULL; + free (error); + if (ok && v_out.f == number) { syntax_gen_string (output, ss_cstr (s)); @@ -196,7 +200,10 @@ syntax_gen_value (struct string *output, const union value *value, int width, if (width == 0) syntax_gen_number (output, value->f, format); else - syntax_gen_string (output, ss_buffer (value_str (value, width), width)); + { + char *s = CHAR_CAST_BUG (char *, value_str (value, width)); + syntax_gen_string (output, ss_buffer (s, width)); + } } /* Appends THRU to OUTPUT. If LOW is LOWEST, then