X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fsyntax-gen.c;h=229e478161299794664b7048eb464fb69b7bfb81;hb=d775f576e4ffc0973c5f183b57b2baa089f555dc;hp=bf1ee12f244caadbfc4197c0b7be466c7660a51e;hpb=5c3291dc396b795696e94f47780308fd7ace6fc4;p=pspp diff --git a/src/ui/syntax-gen.c b/src/ui/syntax-gen.c index bf1ee12f24..229e478161 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,20 +147,23 @@ syntax_gen_number (struct string *output, & (FMT_CAT_DATE | FMT_CAT_TIME | FMT_CAT_DATE_COMPONENT))) { union value v_in, v_out; - char buffer[FMT_MAX_NUMERIC_WIDTH]; + char *s; bool ok; v_in.f = number; - data_out (&v_in, format, buffer); + s = data_out (&v_in, "FIXME", format); msg_disable (); - ok = data_in (ss_buffer (buffer, format->w), LEGACY_NATIVE, - format->type, false, 0, 0, &v_out, 0); + /* FIXME: UTF8 encoded strings will fail here */ + ok = data_in (ss_cstr (s), LEGACY_NATIVE, + format->type, false, 0, 0, NULL, &v_out, 0); msg_enable (); if (ok && v_out.f == number) { - syntax_gen_string (output, ss_buffer (buffer, format->w)); + syntax_gen_string (output, ss_cstr (s)); + free (s); return; } + free (s); } if (number == SYSMIS) @@ -194,7 +198,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