From 74fa641469043b5eafcc038cc6050ec0a332fbf1 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 9 Oct 2011 13:06:52 +0200 Subject: [PATCH] *printf: Fix for platforms where 'long double' == 'double'. * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): Require gl_LONG_DOUBLE_VS_DOUBLE. Don't blindly assume 80-bit 'long double'. * modules/dprintf-posix (Files): Add m4/math_h.m4. * modules/fprintf-posix (Files): Likewise. * modules/obstack-printf-posix (Files): Likewise. * modules/snprintf-posix (Files): Likewise. * modules/sprintf-posix (Files): Likewise. * modules/vasnprintf (Files): Likewise. * modules/vasnprintf-posix (Files): Likewise. * modules/vasprintf-posix (Files): Likewise. * modules/vdprintf-posix (Files): Likewise. * modules/vfprintf-posix (Files): Likewise. * modules/vsnprintf-posix (Files): Likewise. * modules/vsprintf-posix (Files): Likewise. * modules/unistdio/u8-vasnprintf (Files): Likewise. * modules/unistdio/u8-u8-vasnprintf (Files): Likewise. * modules/unistdio/u16-vasnprintf (Files): Likewise. * modules/unistdio/u16-u16-vasnprintf (Files): Likewise. * modules/unistdio/u32-vasnprintf (Files): Likewise. * modules/unistdio/u32-u32-vasnprintf (Files): Likewise. * modules/unistdio/ulc-vasnprintf (Files): Likewise. --- ChangeLog | 23 +++++++++++++++++++++++ m4/printf.m4 | 5 +++-- modules/dprintf-posix | 1 + modules/fprintf-posix | 1 + modules/obstack-printf-posix | 1 + modules/snprintf-posix | 1 + modules/sprintf-posix | 1 + modules/unistdio/u16-u16-vasnprintf | 1 + modules/unistdio/u16-vasnprintf | 1 + modules/unistdio/u32-u32-vasnprintf | 1 + modules/unistdio/u32-vasnprintf | 1 + modules/unistdio/u8-u8-vasnprintf | 1 + modules/unistdio/u8-vasnprintf | 1 + modules/unistdio/ulc-vasnprintf | 1 + modules/vasnprintf | 1 + modules/vasnprintf-posix | 1 + modules/vasprintf-posix | 1 + modules/vdprintf-posix | 1 + modules/vfprintf-posix | 1 + modules/vsnprintf-posix | 1 + modules/vsprintf-posix | 1 + 21 files changed, 45 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 52c523c5c..200a87715 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,28 @@ 2011-10-09 Bruno Haible + *printf: Fix for platforms where 'long double' == 'double'. + * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): Require + gl_LONG_DOUBLE_VS_DOUBLE. Don't blindly assume 80-bit 'long double'. + * modules/dprintf-posix (Files): Add m4/math_h.m4. + * modules/fprintf-posix (Files): Likewise. + * modules/obstack-printf-posix (Files): Likewise. + * modules/snprintf-posix (Files): Likewise. + * modules/sprintf-posix (Files): Likewise. + * modules/vasnprintf (Files): Likewise. + * modules/vasnprintf-posix (Files): Likewise. + * modules/vasprintf-posix (Files): Likewise. + * modules/vdprintf-posix (Files): Likewise. + * modules/vfprintf-posix (Files): Likewise. + * modules/vsnprintf-posix (Files): Likewise. + * modules/vsprintf-posix (Files): Likewise. + * modules/unistdio/u8-vasnprintf (Files): Likewise. + * modules/unistdio/u8-u8-vasnprintf (Files): Likewise. + * modules/unistdio/u16-vasnprintf (Files): Likewise. + * modules/unistdio/u16-u16-vasnprintf (Files): Likewise. + * modules/unistdio/u32-vasnprintf (Files): Likewise. + * modules/unistdio/u32-u32-vasnprintf (Files): Likewise. + * modules/unistdio/ulc-vasnprintf (Files): Likewise. + isnanl[-nolibm]: Fix for platforms where 'long double' == 'double'. * lib/isnan.c (rpl_isnanl): Don't blindly assume 80-bit 'long double'. * m4/isnanl.m4 (gl_PREREQ_ISNANL): Require gl_LONG_DOUBLE_VS_DOUBLE. diff --git a/m4/printf.m4 b/m4/printf.m4 index d046c1112..0814c91fe 100644 --- a/m4/printf.m4 +++ b/m4/printf.m4 @@ -1,4 +1,4 @@ -# printf.m4 serial 45 +# printf.m4 serial 46 dnl Copyright (C) 2003, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -251,6 +251,7 @@ AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl The user can set or unset the variable gl_printf_safe to indicate dnl that he wishes a safe handling of non-IEEE-754 'long double' values. @@ -321,7 +322,7 @@ int main () if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; -#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN diff --git a/modules/dprintf-posix b/modules/dprintf-posix index 2423d6162..c3b257b11 100644 --- a/modules/dprintf-posix +++ b/modules/dprintf-posix @@ -11,6 +11,7 @@ that module occurs among the main modules in lib/. Files: m4/dprintf-posix.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: dprintf diff --git a/modules/fprintf-posix b/modules/fprintf-posix index 47e76c5c5..e7bb211e2 100644 --- a/modules/fprintf-posix +++ b/modules/fprintf-posix @@ -11,6 +11,7 @@ Files: lib/fprintf.c m4/fprintf-posix.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: stdio diff --git a/modules/obstack-printf-posix b/modules/obstack-printf-posix index df5608777..c2036a847 100644 --- a/modules/obstack-printf-posix +++ b/modules/obstack-printf-posix @@ -10,6 +10,7 @@ that module occurs among the main modules in lib/. Files: m4/obstack-printf.m4 m4/obstack-printf-posix.m4 +m4/math_h.m4 lib/obstack_printf.c Depends-on: diff --git a/modules/snprintf-posix b/modules/snprintf-posix index 874ba5a46..78c12a3bf 100644 --- a/modules/snprintf-posix +++ b/modules/snprintf-posix @@ -11,6 +11,7 @@ that module occurs among the main modules in lib/. Files: m4/snprintf-posix.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: snprintf diff --git a/modules/sprintf-posix b/modules/sprintf-posix index cdcc8aa51..c8bc2a3c2 100644 --- a/modules/sprintf-posix +++ b/modules/sprintf-posix @@ -11,6 +11,7 @@ Files: lib/sprintf.c m4/sprintf-posix.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: stdio diff --git a/modules/unistdio/u16-u16-vasnprintf b/modules/unistdio/u16-u16-vasnprintf index c32166961..d9e37e23a 100644 --- a/modules/unistdio/u16-u16-vasnprintf +++ b/modules/unistdio/u16-u16-vasnprintf @@ -6,6 +6,7 @@ lib/unistdio/u16-u16-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 +m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/longlong.m4 diff --git a/modules/unistdio/u16-vasnprintf b/modules/unistdio/u16-vasnprintf index a382ce47b..21d19bd0f 100644 --- a/modules/unistdio/u16-vasnprintf +++ b/modules/unistdio/u16-vasnprintf @@ -6,6 +6,7 @@ lib/unistdio/u16-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 +m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/longlong.m4 diff --git a/modules/unistdio/u32-u32-vasnprintf b/modules/unistdio/u32-u32-vasnprintf index 800c61e6f..c239248ad 100644 --- a/modules/unistdio/u32-u32-vasnprintf +++ b/modules/unistdio/u32-u32-vasnprintf @@ -6,6 +6,7 @@ lib/unistdio/u32-u32-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 +m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/longlong.m4 diff --git a/modules/unistdio/u32-vasnprintf b/modules/unistdio/u32-vasnprintf index fe71cb2b7..d73ddc8c3 100644 --- a/modules/unistdio/u32-vasnprintf +++ b/modules/unistdio/u32-vasnprintf @@ -6,6 +6,7 @@ lib/unistdio/u32-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 +m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/longlong.m4 diff --git a/modules/unistdio/u8-u8-vasnprintf b/modules/unistdio/u8-u8-vasnprintf index 5e9552169..5cc91503e 100644 --- a/modules/unistdio/u8-u8-vasnprintf +++ b/modules/unistdio/u8-u8-vasnprintf @@ -6,6 +6,7 @@ lib/unistdio/u8-u8-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 +m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/longlong.m4 diff --git a/modules/unistdio/u8-vasnprintf b/modules/unistdio/u8-vasnprintf index 3aaf935c8..049e5c1f8 100644 --- a/modules/unistdio/u8-vasnprintf +++ b/modules/unistdio/u8-vasnprintf @@ -6,6 +6,7 @@ lib/unistdio/u8-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 +m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/longlong.m4 diff --git a/modules/unistdio/ulc-vasnprintf b/modules/unistdio/ulc-vasnprintf index 8228a0678..c3563c5e3 100644 --- a/modules/unistdio/ulc-vasnprintf +++ b/modules/unistdio/ulc-vasnprintf @@ -6,6 +6,7 @@ lib/unistdio/ulc-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 +m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/longlong.m4 diff --git a/modules/vasnprintf b/modules/vasnprintf index 35f5f3a30..da6b28056 100644 --- a/modules/vasnprintf +++ b/modules/vasnprintf @@ -18,6 +18,7 @@ m4/stdint_h.m4 m4/inttypes_h.m4 m4/vasnprintf.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: alloca-opt diff --git a/modules/vasnprintf-posix b/modules/vasnprintf-posix index 6a6177abb..090b1d244 100644 --- a/modules/vasnprintf-posix +++ b/modules/vasnprintf-posix @@ -11,6 +11,7 @@ that module occurs among the main modules in lib/. Files: m4/vasnprintf-posix.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: vasnprintf diff --git a/modules/vasprintf-posix b/modules/vasprintf-posix index 5e9050689..9665b76c7 100644 --- a/modules/vasprintf-posix +++ b/modules/vasprintf-posix @@ -10,6 +10,7 @@ that module occurs among the main modules in lib/. Files: m4/vasprintf-posix.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: vasprintf diff --git a/modules/vdprintf-posix b/modules/vdprintf-posix index 518ecde52..c994a4f2c 100644 --- a/modules/vdprintf-posix +++ b/modules/vdprintf-posix @@ -11,6 +11,7 @@ that module occurs among the main modules in lib/. Files: m4/vdprintf-posix.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: vdprintf diff --git a/modules/vfprintf-posix b/modules/vfprintf-posix index 69b6608e0..aba18b57c 100644 --- a/modules/vfprintf-posix +++ b/modules/vfprintf-posix @@ -11,6 +11,7 @@ Files: lib/vfprintf.c m4/vfprintf-posix.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: stdio diff --git a/modules/vsnprintf-posix b/modules/vsnprintf-posix index 198beeb58..e3456fbc8 100644 --- a/modules/vsnprintf-posix +++ b/modules/vsnprintf-posix @@ -11,6 +11,7 @@ that module occurs among the main modules in lib/. Files: m4/vsnprintf-posix.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: vsnprintf diff --git a/modules/vsprintf-posix b/modules/vsprintf-posix index 10e538561..99c80f14f 100644 --- a/modules/vsprintf-posix +++ b/modules/vsprintf-posix @@ -11,6 +11,7 @@ Files: lib/vsprintf.c m4/vsprintf-posix.m4 m4/printf.m4 +m4/math_h.m4 Depends-on: stdio -- 2.11.0