aboutsummaryrefslogtreecommitdiff
path: root/libquadmath/printf/printf_fphex.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-02-16 14:54:30 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2011-02-16 14:54:30 +0100
commitd2995f218548fb6e506348377bf150c69dd231a6 (patch)
treef3947cffa865d6825f1d64a027010b829f2e6182 /libquadmath/printf/printf_fphex.c
parent5037599a7442f3b528905f13221c8affa5a9f20e (diff)
downloadgcc-d2995f218548fb6e506348377bf150c69dd231a6.zip
gcc-d2995f218548fb6e506348377bf150c69dd231a6.tar.gz
gcc-d2995f218548fb6e506348377bf150c69dd231a6.tar.bz2
quadmath-printf.c: Also check __GLIBC__ when checking whether workarounds for printf hook handling...
* printf/quadmath-printf.c: Also check __GLIBC__ when checking whether workarounds for printf hook handling should be added. * configure.ac: Check for locale.h too. (USE_LOCALE_SUPPORT): Remove check. (USE_NL_LANGINFO, USE_NL_LANGINFO_WC, USE_LOCALECONV): New checks. (USE_I18_NUMBER_H): Check also for _NL_CTYPE_MB_CUR_MAX. * printf/printf_fphex.c (__quadmath_printf_fphex): Use nl_langinfo or localeconv for narrow version and nl_langinfo if USE_NL_LANGINFO_WC for wide version. * printf/quadmath-printf.h: Include locale.h if HAVE_LOCALE_H. * printf/printf_fp.c (USE_I18N_NUMBER_H): Don't define to 0. (__quadmath_printf_fp): Use nl_langinfo or localeconv for narrow version and nl_langinfo if USE_NL_LANGINFO_WC for wide version. Guard nl_langinfo (_NL_CTYPE_MB_CUR_MAX) use with USE_I18N_NUMBER_H #ifdef. * configure: Regenerated. * config.h.in: Regenerated. From-SVN: r170211
Diffstat (limited to 'libquadmath/printf/printf_fphex.c')
-rw-r--r--libquadmath/printf/printf_fphex.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/libquadmath/printf/printf_fphex.c b/libquadmath/printf/printf_fphex.c
index 44900f4..941e933 100644
--- a/libquadmath/printf/printf_fphex.c
+++ b/libquadmath/printf/printf_fphex.c
@@ -117,25 +117,44 @@ __quadmath_printf_fphex (struct __quadmath_printf_file *fp,
int wide = info->wide;
/* Figure out the decimal point character. */
-#ifdef USE_LOCALE_SUPPORT
+#ifdef USE_NL_LANGINFO
if (info->extra == 0)
- {
- decimal = nl_langinfo (DECIMAL_POINT);
- decimalwc = nl_langinfo_wc (_NL_NUMERIC_DECIMAL_POINT_WC);
- }
+ decimal = nl_langinfo (DECIMAL_POINT);
else
{
decimal = nl_langinfo (MON_DECIMAL_POINT);
if (*decimal == '\0')
decimal = nl_langinfo (DECIMAL_POINT);
+ }
+ /* The decimal point character must never be zero. */
+ assert (*decimal != '\0');
+#elif defined USE_LOCALECONV
+ const struct lconv *lc = localeconv ();
+ if (info->extra == 0)
+ decimal = lc->decimal_point;
+ else
+ {
+ decimal = lc->mon_decimal_point;
+ if (decimal == NULL || *decimal == '\0')
+ decimal = lc->decimal_point;
+ }
+ if (decimal == NULL || *decimal == '\0')
+ decimal = ".";
+#else
+ decimal = ".";
+#endif
+#ifdef USE_NL_LANGINFO_WC
+ if (info->extra == 0)
+ decimalwc = nl_langinfo_wc (_NL_NUMERIC_DECIMAL_POINT_WC);
+ else
+ {
decimalwc = nl_langinfo_wc (_NL_MONETARY_DECIMAL_POINT_WC);
- if (decimalwc == L'\0')
+ if (decimalwc == L_('\0'))
decimalwc = nl_langinfo_wc (_NL_NUMERIC_DECIMAL_POINT_WC);
}
/* The decimal point character must never be zero. */
- assert (*decimal != '\0' && decimalwc != L'\0');
+ assert (decimalwc != L_('\0'));
#else
- decimal = ".";
decimalwc = L_('.');
#endif