From 11f7c24c2eabbcb08e422e9ca0947b9848a9d484 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Tue, 26 Oct 2021 23:35:36 +1100 Subject: render/d3d: Replaced some locale-sensitive configuration parsing code. --- src/osd/modules/render/d3d/d3dhlsl.cpp | 39 ++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp index b923deb6f17..5e760de0e58 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.cpp +++ b/src/osd/modules/render/d3d/d3dhlsl.cpp @@ -26,9 +26,13 @@ #include "strconv.h" #include "d3dhlsl.h" #include "../frontend/mame/ui/slider.h" + #include +#include +#include #include + //============================================================ // PROTOTYPES //============================================================ @@ -1958,25 +1962,24 @@ void shaders::delete_resources() static void get_vector(const char *data, int count, float *out, bool report_error) { - if (count > 3 && - sscanf(data, "%f,%f,%f,%f", &out[0], &out[1], &out[2], &out[3]) < 4 && report_error) - { - osd_printf_error("Illegal quad vector value = %s\n", data); - } - else if (count > 2 && - sscanf(data, "%f,%f,%f", &out[0], &out[1], &out[2]) < 3 && report_error) + std::istringstream is(data); + is.imbue(std::locale::classic()); + for (int i = 0; count > i; ) { - osd_printf_error("Illegal triple vector value = %s\n", data); - } - else if (count > 1 && - sscanf(data, "%f,%f", &out[0], &out[1]) < 2 && report_error) - { - osd_printf_error("Illegal double vector value = %s\n", data); - } - else if (count > 0 && - sscanf(data, "%f", &out[0]) < 1 && report_error) - { - osd_printf_error("Illegal single vector value = %s\n", data); + is >> out[i]; + bool bad = !is; + if (++i < count) + { + char ch; + is >> ch; + bad = bad || !is || (',' != ch); + } + if (bad) + { + if (report_error) + osd_printf_error("Illegal %d-item vector value = %s\n", count, data); + return; + } } } -- cgit v1.2.3