Otherwise, assume the C run-time does not depend on the locale (at least not to format floating point numbers). --- configure.in | 1 + src/conf.c | 6 ++++++ 2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/configure.in b/configure.in index 9d985b8..e62e3bd 100644 --- a/configure.in +++ b/configure.in @@ -64,6 +64,7 @@ dnl Checks for library functions. AC_PROG_GCC_TRADITIONAL AC_CHECK_FUNC([hsearch_r], [HAVE_HSEARCH_R=yes]) AM_CONDITIONAL(ALSA_HSEARCH_R, [test "x$HAVE_HSEARCH_R" != xyes]) +AC_CHECK_FUNCS([uselocale])
SAVE_LIBRARY_VERSION AC_SUBST(LIBTOOL_VERSION_INFO) diff --git a/src/conf.c b/src/conf.c index ce252ab..d1d4a5f 100644 --- a/src/conf.c +++ b/src/conf.c @@ -499,20 +499,26 @@ static int safe_strtod(const char *str, double *val) { char *end; double v; +#ifdef HAVE_USELOCALE locale_t saved_locale, c_locale; +#endif int err;
if (!*str) return -EINVAL; +#ifdef HAVE_USELOCALE c_locale = newlocale(LC_NUMERIC_MASK, "C", 0); saved_locale = uselocale(c_locale); +#endif errno = 0; v = strtod(str, &end); err = -errno; +#ifdef HAVE_USELOCALE if (c_locale != (locale_t)0) { uselocale(saved_locale); freelocale(c_locale); } +#endif if (err) return err; if (*end)