diff options
author | Bruno Haible <bruno@clisp.org> | 2019-02-01 04:34:37 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2019-02-02 02:03:02 +0100 |
commit | b39cc72608e7ae56e959e2f12f7c8b355e63a35a (patch) | |
tree | aed76819cdea1a2424963b0a9d251053d0983583 /m4 | |
parent | 97e23d40a659c85048b59852e1871823f727aeb2 (diff) | |
download | gnulib-b39cc72608e7ae56e959e2f12f7c8b355e63a35a.tar.gz |
c-strtod, c-strtold: Use the bug fixes for strtod, strtold.
* lib/stdlib.in.h (GNULIB_defined_strtod_function,
GNULIB_defined_strtold_function): New macros.
* lib/c-strtod.c (HAVE_GOOD_STRTOD_L): New macro.
(STRTOD): Ignore HAVE_C99_STRTOLD.
(c_locale): Don't define it on platforms where strtod_l/strtold_l is
deemed buggy. But do use it on platforms where uselocale exists and is
usable.
(C_STRTOD): Don't use STRTOD_L on platforms where strtod_l/strtold_l is
deemed buggy. On platforms where uselocale exists and is usable, use
uselocale and strtod/strtold.
* m4/c-strtod.m4 (gl_C99_STRTOLD): Remove macro.
(gl_C_STRTOD): Require gt_FUNC_USELOCALE.
(gl_C_STRTOLD): Likewise. Define HAVE_C99_STRTOLD unconditionally.
* modules/c-strtod (Files): Add m4/intl-thread-locale.m4.
(Depends-on): Add strtod.
* modules/c-strtold (Files): Add m4/intl-thread-locale.m4.
(Depends-on): Add strtold.
Diffstat (limited to 'm4')
-rw-r--r-- | m4/c-strtod.m4 | 33 |
1 files changed, 5 insertions, 28 deletions
diff --git a/m4/c-strtod.m4 b/m4/c-strtod.m4 index 1694a2396c..1d4b7f860c 100644 --- a/m4/c-strtod.m4 +++ b/m4/c-strtod.m4 @@ -1,4 +1,4 @@ -# c-strtod.m4 serial 16 +# c-strtod.m4 serial 17 # Copyright (C) 2004-2006, 2009-2019 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation @@ -7,36 +7,11 @@ # Written by Paul Eggert. -AC_DEFUN([gl_C99_STRTOLD], -[ - AC_CACHE_CHECK([whether strtold conforms to C99], - [gl_cv_func_c99_strtold], - [AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[/* On HP-UX before 11.23, strtold returns a struct instead of - long double. Reject implementations like that, by requiring - compatibility with the C99 prototype. */ - #include <stdlib.h> - static long double (*p) (char const *, char **) = strtold; - static long double - test (char const *nptr, char **endptr) - { - long double r; - r = strtold (nptr, endptr); - return r; - }]], - [[return test ("1.0", NULL) != 1 || p ("1.0", NULL) != 1;]])], - [gl_cv_func_c99_strtold=yes], - [gl_cv_func_c99_strtold=no])]) - if test $gl_cv_func_c99_strtold = yes; then - AC_DEFINE([HAVE_C99_STRTOLD], [1], [Define to 1 if strtold conforms to C99.]) - fi -]) - dnl Prerequisites of lib/c-strtod.c. AC_DEFUN([gl_C_STRTOD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gt_FUNC_USELOCALE]) AC_CHECK_HEADERS_ONCE([xlocale.h]) dnl We can't use AC_CHECK_FUNC here, because strtod_l() is defined as a @@ -71,6 +46,8 @@ dnl Prerequisites of lib/c-strtold.c. AC_DEFUN([gl_C_STRTOLD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - AC_REQUIRE([gl_C99_STRTOLD]) + AC_REQUIRE([gt_FUNC_USELOCALE]) + AC_DEFINE([HAVE_C99_STRTOLD], [1], + [Define to 1 because the gnulib 'strtold' module provides a C99-conforming strtold function.]) AC_CHECK_FUNCS([strtold_l]) ]) |