g_date_time_format: fix output in non-UTF-8 locales

In non-UTF-8 locales, the translations and nl_langinfo() return values
must be converted to UTF-8 before being returned to the caller.
Likewise, when making a recursive call to expand a format like '%x',
the format string must first be converted to UTF-8.

https://bugzilla.gnome.org/show_bug.cgi?id=668250
This commit is contained in:
Dan Winship
2012-01-19 10:39:57 -05:00
parent 9fa374ccf7
commit b6a8dec558
3 changed files with 413 additions and 250 deletions

View File

@@ -1305,24 +1305,24 @@ if test x$glib_cv_langinfo_time = xyes; then
AC_DEFINE(HAVE_LANGINFO_TIME,1,[Have nl_langinfo (PM_STR)])
fi
dnl Check for nl_langinfo and _NL_CTYPE_OUTDIGITn_WC
AC_CACHE_CHECK([for nl_langinfo (_NL_CTYPE_OUTDIGITn_WC)], glib_cv_langinfo_outdigit,[
dnl Check for nl_langinfo and _NL_CTYPE_OUTDIGITn_MB
AC_CACHE_CHECK([for nl_langinfo (_NL_CTYPE_OUTDIGITn_MB)], glib_cv_langinfo_outdigit,[
AC_TRY_COMPILE([#include <langinfo.h>],
[char *str;
str = nl_langinfo (_NL_CTYPE_OUTDIGIT0_WC);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT1_WC);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT2_WC);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT3_WC);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT4_WC);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT5_WC);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT6_WC);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT7_WC);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT8_WC);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT9_WC);],
str = nl_langinfo (_NL_CTYPE_OUTDIGIT0_MB);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT1_MB);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT2_MB);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT3_MB);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT4_MB);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT5_MB);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT6_MB);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT7_MB);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT8_MB);
str = nl_langinfo (_NL_CTYPE_OUTDIGIT9_MB);],
[glib_cv_langinfo_outdigit=yes],
[glib_cv_langinfo_outdigit=no])])
if test x$glib_cv_langinfo_outdigit = xyes; then
AC_DEFINE(HAVE_LANGINFO_OUTDIGIT,1,[Have nl_langinfo (_NL_CTYPE_OUTDIGITn_WC)])
AC_DEFINE(HAVE_LANGINFO_OUTDIGIT,1,[Have nl_langinfo (_NL_CTYPE_OUTDIGITn_MB)])
fi
dnl ****************************************