summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/render/d3d/d3dhlsl.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2021-10-26 23:35:36 +1100
committer Vas Crabb <vas@vastheman.com>2021-10-26 23:35:36 +1100
commit11f7c24c2eabbcb08e422e9ca0947b9848a9d484 (patch)
treea430b5041435d1ce582900d620678ead3e1a259e /src/osd/modules/render/d3d/d3dhlsl.cpp
parent60706c1e933d8533232157241a576f96a229380e (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.cpp39
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;
+ }
}
}