+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.
#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
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] : '.');
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] : '.');
-# 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,
;;
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
-# 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,
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
-# 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,
;;
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
-# 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,
;;
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
])
-# 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,
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],
[
-# 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,
;;
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
-# 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,
;;
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
-# 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,
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
-# 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,
;;
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