From c32ab03ffbc46b177f5578b980b0d3a269b9e5b5 Mon Sep 17 00:00:00 2001 From: Burt P Date: Sat, 28 Dec 2019 01:14:35 -0600 Subject: fix bench_value_from_str() for floats with , for decimal Fixes https://github.com/lpereira/hardinfo/issues/497 Signed-off-by: Burt P --- modules/benchmark.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/benchmark.c b/modules/benchmark.c index 2448db00..fe95cd47 100644 --- a/modules/benchmark.c +++ b/modules/benchmark.c @@ -60,14 +60,17 @@ char *bench_value_to_str(bench_value r) { bench_value bench_value_from_str(const char* str) { bench_value ret = EMPTY_BENCH_VALUE; - double r, e; + char rstr[32] = "", estr[32] = "", *p; int t, c, v; char extra[256], user_note[256]; if (str) { - c = sscanf(str, "%lf; %lf; %d; %d; %255[^\r\n;|]; %255[^\r\n;|]", &r, &e, &t, &v, extra, user_note); + /* try to handle floats from locales that use ',' or '.' as decimal sep */ + c = sscanf(str, "%[-+0-9.,]; %[-+0-9.,]; %d; %d; %255[^\r\n;|]; %255[^\r\n;|]", rstr, estr, &t, &v, extra, user_note); if (c >= 3) { - ret.result = r; - ret.elapsed_time = e; + if ((p = strchr(rstr, ','))) { *p = '.'; } + if ((p = strchr(estr, ','))) { *p = '.'; } + ret.result = strtod(rstr, NULL); + ret.elapsed_time = strtod(estr, NULL); ret.threads_used = t; } if (c >= 4) { -- cgit v1.2.3