summaryrefslogtreecommitdiff
path: root/overlay
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2018-03-27 15:20:51 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2018-03-27 20:59:17 +0100
commit3fa0b027304ec28cd24b314349d3731b55dfcc0a (patch)
tree23e8601be2d2dfba4b1cb55614411f7585aa0c9a /overlay
parenta9741da52ad1963f7632ef1e852cbe1c3bcc601e (diff)
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 <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Diffstat (limited to 'overlay')
-rw-r--r--overlay/power.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/overlay/power.c b/overlay/power.c
index 9ac90fde..0f99e2a4 100644
--- a/overlay/power.c
+++ b/overlay/power.c
@@ -31,6 +31,7 @@
#include <time.h>
#include <errno.h>
#include <ctype.h>
+#include <locale.h>
#include <math.h>
#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)