+2019-12-17 Bruno Haible <bruno@clisp.org>
+
+ nl_langinfo: Fix multithread-safety bug on OpenBSD 3.8.
+ * lib/nl_langinfo.c (ctype_codeset): Invoke setlocale_null instead of
+ setlocale.
+ * m4/nl_langinfo.m4 (gl_FUNC_NL_LANGINFO): Require
+ gl_FUNC_SETLOCALE_NULL. Set LIB_NL_LANGINFO.
+ * modules/nl_langinfo (Depends-on): Add setlocale-null.
+
2019-12-17 Bruno Haible <bruno@clisp.org>
nl_langinfo: Fix multithread-safety bug on mingw and MSVC.
{
static char result[2 + 10 + 1];
char buf[2 + 10 + 1];
- char const *locale = setlocale (LC_CTYPE, NULL);
- char *codeset = buf;
+ char locale[SETLOCALE_NULL_MAX];
+ char *codeset;
size_t codesetlen;
+
+ if (setlocale_null (LC_CTYPE, locale, sizeof (locale)))
+ locale[0] = '\0';
+
+ codeset = buf;
codeset[0] = '\0';
if (locale && locale[0])
-# nl_langinfo.m4 serial 6
+# nl_langinfo.m4 serial 7
dnl Copyright (C) 2009-2019 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_REQUIRE([gl_LANGINFO_H])
AC_CHECK_FUNCS_ONCE([nl_langinfo])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_REQUIRE([gl_FUNC_SETLOCALE_NULL])
if test $ac_cv_func_nl_langinfo = yes; then
# On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken.
AC_CACHE_CHECK([whether YESEXPR works],
else
HAVE_NL_LANGINFO=0
fi
+ if test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0; then
+ LIB_NL_LANGINFO="$LIB_SETLOCALE_NULL"
+ else
+ LIB_NL_LANGINFO=
+ fi
+ dnl LIB_NL_LANGINFO is expected to be empty everywhere.
+ AC_SUBST([LIB_NL_LANGINFO])
])