[Intel-gfx] [PATCH igt] overlay: Call setlocale around strtod
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Tue Mar 27 14:42:23 UTC 2018
On 27/03/2018 15:28, Chris Wilson wrote:
> 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 at chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
> overlay/power.c | 11 +++++++++--
> 1 file 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)
>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Regards,
Tvrtko
More information about the Intel-gfx
mailing list