提交 96a9b9a7 编写于 作者: J Julio Faracco 提交者: Martin Kletzander

util: fix locale problem with virStrToDouble().

This commit fixes a locale problem with locales that use comma as a mantissa
separator. Example: 12.34 en_US = 12,34 pt_BR. Since strtod() is a non-safe
function, virStrToDouble() will have problems to parse double numbers from
kernel settings and other double numbers from static files (XMLs, JSONs, etc).

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1457634
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1457481Signed-off-by: NJulio Faracco <jcfaracco@gmail.com>
上级 5c54d29a
......@@ -534,7 +534,13 @@ virLocaleOnceInit(void)
VIR_ONCE_GLOBAL_INIT(virLocale);
#endif
/**
* virStrToDouble
*
* converts string with C locale (thread-safe) to double.
*
* Returns -1 on error or returns 0 on success.
*/
int
virStrToDouble(char const *s,
char **end_ptr,
......@@ -545,7 +551,17 @@ virStrToDouble(char const *s,
int err;
errno = 0;
#if HAVE_NEWLOCALE
locale_t old_loc;
if (virLocaleInitialize() < 0)
return -1;
old_loc = uselocale(virLocale);
#endif
val = strtod(s, &p); /* exempt from syntax-check */
#if HAVE_NEWLOCALE
uselocale(old_loc);
#endif
err = (errno || (!end_ptr && *p) || p == s);
if (end_ptr)
*end_ptr = p;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册