summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2007-03-26 02:15:46 +0000
committerBruno Haible <bruno@clisp.org>2007-03-26 02:15:46 +0000
commit5b57d6d54bcc8b9339b6216e0d62e750ab6e2ef3 (patch)
tree771cc9b3f940ab01a7a283ea17c06af4ebeb4692
parentc2a27af8e00b5f7d0b6fcdea066daecae3d50d30 (diff)
downloadgnulib-5b57d6d54bcc8b9339b6216e0d62e750ab6e2ef3.tar.gz
Prefer nl_langinfo over localeconv.
-rw-r--r--ChangeLog16
-rw-r--r--lib/vasnprintf.c25
-rw-r--r--m4/fprintf-posix.m48
-rw-r--r--m4/snprintf-posix.m48
-rw-r--r--m4/sprintf-posix.m48
-rw-r--r--m4/vasnprintf-posix.m48
-rw-r--r--m4/vasnprintf.m414
-rw-r--r--m4/vasprintf-posix.m48
-rw-r--r--m4/vfprintf-posix.m48
-rw-r--r--m4/vsnprintf-posix.m48
-rw-r--r--m4/vsprintf-posix.m48
11 files changed, 66 insertions, 53 deletions
diff --git a/ChangeLog b/ChangeLog
index aeabcc00d7..75d701e932 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,21 @@
2007-03-25 Bruno Haible <bruno@clisp.org>
+ * lib/vasnprintf.c: Include langinfo.h.
+ (VASNPRINTF): Prefer nl_langinfo over localeconv, since it's more
+ multithread-safe.
+ * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_DIRECTIVE_A): New macro.
+ * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke it.
+ * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Likewise.
+ * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise.
+ * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise.
+ * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise.
+ * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise.
+ * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX: Likewise.
+ * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise.
+ Reported by Simon Josefsson.
+
+2007-03-25 Bruno Haible <bruno@clisp.org>
+
* lib/printf-parse.c [!IN_LIBINTL]: Include <stdint.h>, for intmax_t.
(PRINTF_PARSE): Make the support for size specifier 'j' unconditional.
* modules/vasnprintf (Depends-on): Add stdint.
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
index 75d33b347e..ab82b21241 100644
--- a/lib/vasnprintf.c
+++ b/lib/vasnprintf.c
@@ -41,6 +41,9 @@
#include <errno.h> /* errno */
#include <limits.h> /* CHAR_BIT */
#include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */
+#if HAVE_NL_LANGINFO
+# include <langinfo.h>
+#endif
#if WIDE_CHAR_VERSION
# include "wprintf-parse.h"
#else
@@ -507,8 +510,15 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar
if ((flags & FLAG_ALT)
|| mantissa > 0.0L || precision > 0)
{
- const char *point =
- localeconv () -> decimal_point;
+ const char *point;
+ /* Prefer nl_langinfo() over localeconv(),
+ since the latter is not multithread-
+ safe. */
+# if HAVE_NL_LANGINFO
+ point = nl_langinfo (RADIXCHAR);
+# else
+ point = localeconv () -> decimal_point;
+# endif
/* The decimal point is always a single byte:
either '.' or ','. */
*p++ = (point[0] != '\0' ? point[0] : '.');
@@ -657,8 +667,15 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar
if ((flags & FLAG_ALT)
|| mantissa > 0.0 || precision > 0)
{
- const char *point =
- localeconv () -> decimal_point;
+ const char *point;
+ /* Prefer nl_langinfo() over localeconv(),
+ since the latter is not multithread-
+ safe. */
+# if HAVE_NL_LANGINFO
+ point = nl_langinfo (RADIXCHAR);
+# else
+ point = localeconv () -> decimal_point;
+# endif
/* The decimal point is always a single byte:
either '.' or ','. */
*p++ = (point[0] != '\0' ? point[0] : '.');
diff --git a/m4/fprintf-posix.m4 b/m4/fprintf-posix.m4
index 60e519d606..5566deccf4 100644
--- a/m4/fprintf-posix.m4
+++ b/m4/fprintf-posix.m4
@@ -1,4 +1,4 @@
-# fprintf-posix.m4 serial 1
+# fprintf-posix.m4 serial 2
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -31,11 +31,7 @@ AC_DEFUN([gl_FUNC_FPRINTF_POSIX],
;;
esac
if test $gl_cv_func_fprintf_posix = no; then
- if ! expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null; then
- AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
- [Define if the vasnprintf implementation needs special code for
- the 'a' and 'A' directives.])
- fi
+ gl_PREREQ_VASNPRINTF_DIRECTIVE_A
gl_REPLACE_VASNPRINTF
gl_REPLACE_FPRINTF
fi
diff --git a/m4/snprintf-posix.m4 b/m4/snprintf-posix.m4
index d1f889ed88..7b9e73b4cb 100644
--- a/m4/snprintf-posix.m4
+++ b/m4/snprintf-posix.m4
@@ -1,4 +1,4 @@
-# snprintf-posix.m4 serial 1
+# snprintf-posix.m4 serial 2
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -50,11 +50,7 @@ AC_DEFUN([gl_FUNC_SNPRINTF_POSIX],
esac
fi
if test $gl_cv_func_snprintf_posix = no; then
- if ! expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null; then
- AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
- [Define if the vasnprintf implementation needs special code for
- the 'a' and 'A' directives.])
- fi
+ gl_PREREQ_VASNPRINTF_DIRECTIVE_A
gl_REPLACE_VASNPRINTF
gl_REPLACE_SNPRINTF
fi
diff --git a/m4/sprintf-posix.m4 b/m4/sprintf-posix.m4
index 99321940f5..5e6c3961bd 100644
--- a/m4/sprintf-posix.m4
+++ b/m4/sprintf-posix.m4
@@ -1,4 +1,4 @@
-# sprintf-posix.m4 serial 1
+# sprintf-posix.m4 serial 2
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -31,11 +31,7 @@ AC_DEFUN([gl_FUNC_SPRINTF_POSIX],
;;
esac
if test $gl_cv_func_sprintf_posix = no; then
- if ! expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null; then
- AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
- [Define if the vasnprintf implementation needs special code for
- the 'a' and 'A' directives.])
- fi
+ gl_PREREQ_VASNPRINTF_DIRECTIVE_A
gl_REPLACE_VASNPRINTF
gl_REPLACE_SPRINTF
fi
diff --git a/m4/vasnprintf-posix.m4 b/m4/vasnprintf-posix.m4
index ea282a1bb3..8c3d9779e9 100644
--- a/m4/vasnprintf-posix.m4
+++ b/m4/vasnprintf-posix.m4
@@ -1,4 +1,4 @@
-# vasnprintf-posix.m4 serial 2
+# vasnprintf-posix.m4 serial 3
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -34,11 +34,7 @@ AC_DEFUN([gl_FUNC_VASNPRINTF_POSIX],
;;
esac
if test $gl_cv_func_vasnprintf_posix = no; then
- if ! expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null; then
- AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
- [Define if the vasnprintf implementation needs special code for
- the 'a' and 'A' directives.])
- fi
+ gl_PREREQ_VASNPRINTF_DIRECTIVE_A
gl_REPLACE_VASNPRINTF
fi
])
diff --git a/m4/vasnprintf.m4 b/m4/vasnprintf.m4
index 5aa05bc61c..a225c1c478 100644
--- a/m4/vasnprintf.m4
+++ b/m4/vasnprintf.m4
@@ -1,4 +1,4 @@
-# vasnprintf.m4 serial 9
+# vasnprintf.m4 serial 10
dnl Copyright (C) 2002-2004, 2006-2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -62,6 +62,18 @@ AC_DEFUN([gl_PREREQ_VASNPRINTF],
AC_CHECK_FUNCS(snprintf wcslen)
])
+# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A],
+[
+ AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
+ if ! expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null; then
+ AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
+ [Define if the vasnprintf implementation needs special code for
+ the 'a' and 'A' directives.])
+ AC_CHECK_FUNCS([nl_langinfo])
+ fi
+])
+
# Prerequisites of lib/asnprintf.c.
AC_DEFUN([gl_PREREQ_ASNPRINTF],
[
diff --git a/m4/vasprintf-posix.m4 b/m4/vasprintf-posix.m4
index 079ac768bc..7ab9ab6ee4 100644
--- a/m4/vasprintf-posix.m4
+++ b/m4/vasprintf-posix.m4
@@ -1,4 +1,4 @@
-# vasprintf-posix.m4 serial 2
+# vasprintf-posix.m4 serial 3
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -34,11 +34,7 @@ AC_DEFUN([gl_FUNC_VASPRINTF_POSIX],
;;
esac
if test $gl_cv_func_vasprintf_posix = no; then
- if ! expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null; then
- AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
- [Define if the vasnprintf implementation needs special code for
- the 'a' and 'A' directives.])
- fi
+ gl_PREREQ_VASNPRINTF_DIRECTIVE_A
gl_REPLACE_VASNPRINTF
gl_REPLACE_VASPRINTF
fi
diff --git a/m4/vfprintf-posix.m4 b/m4/vfprintf-posix.m4
index 11cbfda427..9b41787864 100644
--- a/m4/vfprintf-posix.m4
+++ b/m4/vfprintf-posix.m4
@@ -1,4 +1,4 @@
-# vfprintf-posix.m4 serial 1
+# vfprintf-posix.m4 serial 2
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -31,11 +31,7 @@ AC_DEFUN([gl_FUNC_VFPRINTF_POSIX],
;;
esac
if test $gl_cv_func_vfprintf_posix = no; then
- if ! expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null; then
- AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
- [Define if the vasnprintf implementation needs special code for
- the 'a' and 'A' directives.])
- fi
+ gl_PREREQ_VASNPRINTF_DIRECTIVE_A
gl_REPLACE_VASNPRINTF
gl_REPLACE_VFPRINTF
fi
diff --git a/m4/vsnprintf-posix.m4 b/m4/vsnprintf-posix.m4
index c90ad8ef2e..f776da066a 100644
--- a/m4/vsnprintf-posix.m4
+++ b/m4/vsnprintf-posix.m4
@@ -1,4 +1,4 @@
-# vsnprintf-posix.m4 serial 1
+# vsnprintf-posix.m4 serial 2
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -51,11 +51,7 @@ AC_DEFUN([gl_FUNC_VSNPRINTF_POSIX],
esac
fi
if test $gl_cv_func_vsnprintf_posix = no; then
- if ! expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null; then
- AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
- [Define if the vasnprintf implementation needs special code for
- the 'a' and 'A' directives.])
- fi
+ gl_PREREQ_VASNPRINTF_DIRECTIVE_A
gl_REPLACE_VASNPRINTF
gl_REPLACE_VSNPRINTF
fi
diff --git a/m4/vsprintf-posix.m4 b/m4/vsprintf-posix.m4
index ef5d2e8a19..f0b7ba93e5 100644
--- a/m4/vsprintf-posix.m4
+++ b/m4/vsprintf-posix.m4
@@ -1,4 +1,4 @@
-# vsprintf-posix.m4 serial 1
+# vsprintf-posix.m4 serial 2
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -31,11 +31,7 @@ AC_DEFUN([gl_FUNC_VSPRINTF_POSIX],
;;
esac
if test $gl_cv_func_vsprintf_posix = no; then
- if ! expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null; then
- AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
- [Define if the vasnprintf implementation needs special code for
- the 'a' and 'A' directives.])
- fi
+ gl_PREREQ_VASNPRINTF_DIRECTIVE_A
gl_REPLACE_VASNPRINTF
gl_REPLACE_VSPRINTF
fi