diff options
author | 2021-10-26 23:35:36 +1100 | |
---|---|---|
committer | 2021-10-26 23:35:36 +1100 | |
commit | 11f7c24c2eabbcb08e422e9ca0947b9848a9d484 (patch) | |
tree | a430b5041435d1ce582900d620678ead3e1a259e /src/osd/modules/render/d3d/d3dhlsl.cpp | |
parent | 60706c1e933d8533232157241a576f96a229380e (diff) |
render/d3d: Replaced some locale-sensitive configuration parsing code.
Diffstat (limited to 'src/osd/modules/render/d3d/d3dhlsl.cpp')
-rw-r--r-- | src/osd/modules/render/d3d/d3dhlsl.cpp | 39 |
1 files 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 <array> +#include <locale> +#include <sstream> #include <utility> + //============================================================ // 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; + } } } |