From cafed23c29a293dfbf34de026bb8a8e1885816da Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 27 Mar 2018 15:20:51 +0100 Subject: [PATCH i-g-t] overlay: Call setlocale around strtod strtod() is locale-dependent. The decimal conversion depends on the radix character ('.' for some of us like myself) varies by locale. As the kernel reports its values using the "C" locale, we need to switch to that when parsing; and switch back before reporting to the user. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105712 Signed-off-by: Chris Wilson Cc: Tvrtko Ursulin --- overlay/power.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/overlay/power.c b/overlay/power.c index 9ac90fd..0f99e2a 100644 --- a/overlay/power.c +++ b/overlay/power.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include "igt_perf.h" @@ -97,12 +98,18 @@ static uint64_t rapl_gpu_power(void) static double filename_to_double(const char *filename) { - char buf[64]; + char *oldlocale; + char buf[80]; + double v; if (filename_to_buf(filename, buf, sizeof(buf))) return 0; - return strtod(buf, NULL); + oldlocale = setlocale(LC_ALL, "C"); + v = strtod(buf, NULL); + setlocale(LC_ALL, oldlocale); + + return v; } static double rapl_gpu_power_scale(void) -- 2.7.4