X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flibpspp%2Fi18n.c;h=db851217c80be27ae129a9c6252824929af51785;hb=f1a02381223dd6d652c590e2a5514967b9448905;hp=d194634f654dfca804cfd5d22b29e57b46f42966;hpb=43b1296aafe7582e7dbe6c2b6a8b478d7d9b0fcf;p=pspp-builds.git diff --git a/src/libpspp/i18n.c b/src/libpspp/i18n.c index d194634f..db851217 100644 --- a/src/libpspp/i18n.c +++ b/src/libpspp/i18n.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -29,6 +30,10 @@ #include #include "xstrndup.h" +#if HAVE_NL_LANGINFO +#include +#endif + static char *locale = 0; static const char *charset; @@ -45,7 +50,7 @@ create_iconv (const char* tocode, const char* fromcode) /* I don't think it's safe to translate this string or to use messaging as the convertors have not yet been set up */ - if ( (iconv_t) -1 == conv) + if ( (iconv_t) -1 == conv && 0 != strcmp (tocode, fromcode)) { const int err = errno; fprintf (stderr, @@ -177,6 +182,9 @@ set_pspp_locale (const char *l) iconv_close (convertor[CONV_SYSTEM_TO_PSPP]); convertor[CONV_SYSTEM_TO_PSPP] = create_iconv (charset, current_charset); + + iconv_close (convertor[CONV_UTF8_TO_PSPP]); + convertor[CONV_UTF8_TO_PSPP] = create_iconv (charset, "UTF-8"); } void @@ -188,8 +196,9 @@ i18n_init (void) setlocale (LC_CTYPE, locale); charset = locale_charset (); - convertor[CONV_PSPP_TO_UTF8] = create_iconv ("UTF-8", charset); + convertor[CONV_PSPP_TO_UTF8] = create_iconv ("UTF-8", charset); convertor[CONV_SYSTEM_TO_PSPP] = create_iconv (charset, charset); + convertor[CONV_UTF8_TO_PSPP] = create_iconv (charset, "UTF-8"); } @@ -208,3 +217,32 @@ i18n_done (void) } } + + + +/* Return the system local's idea of the + decimal seperator character */ +char +get_system_decimal (void) +{ + char radix_char; + + char *ol = setlocale (LC_NUMERIC, NULL); + setlocale (LC_NUMERIC, ""); + +#if HAVE_NL_LANGINFO + radix_char = nl_langinfo (RADIXCHAR)[0]; +#else + { + char buf[10]; + snprintf (buf, sizeof buf, "%f", 2.5); + radix_char = buf[1]; + } +#endif + + /* We MUST leave LC_NUMERIC untouched, since it would + otherwise interfere with data_{in,out} */ + setlocale (LC_NUMERIC, ol); + return radix_char; +} +