Floating point numbers in configuration files always use "." as separator,
so set the locale temporarily to "C" when calling strtod().
#include <limits.h>
#include <sys/stat.h>
#include <pthread.h>
+#include <locale.h>
#include "local.h"
#ifndef DOC_HIDDEN
{
char *end;
double v;
+ char *saved_locale;
+ int err;
+
if (!*str)
return -EINVAL;
+ saved_locale = setlocale(LC_NUMERIC, NULL);
+ setlocale(LC_NUMERIC, "C");
errno = 0;
v = strtod(str, &end);
- if (errno)
- return -errno;
+ err = -errno;
+ setlocale(LC_NUMERIC, saved_locale);
+ if (err)
+ return err;
if (*end)
return -EINVAL;
*val = v;