From 2d2bc93adad5e494c45172fbc0a104fea0c26404 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Mon, 29 Jul 2024 20:38:32 +1000 Subject: [PATCH] dep/reshadefx: Avoid snprintf() when writing float constants Locale-specific, causes breakage on some systems. --- dep/reshadefx/src/effect_codegen_glsl.cpp | 12 +++++++++--- dep/reshadefx/src/effect_codegen_hlsl.cpp | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/dep/reshadefx/src/effect_codegen_glsl.cpp b/dep/reshadefx/src/effect_codegen_glsl.cpp index 63fb1c045..3112aff74 100644 --- a/dep/reshadefx/src/effect_codegen_glsl.cpp +++ b/dep/reshadefx/src/effect_codegen_glsl.cpp @@ -9,6 +9,9 @@ #include // snprintf #include #include // std::find_if, std::max +#include +#include +#include #include using namespace reshadefx; @@ -360,9 +363,12 @@ private: s += std::signbit(data.as_float[i]) ? "1.0/0.0/*inf*/" : "-1.0/0.0/*-inf*/"; break; } - char temp[64]; // Will be null-terminated by snprintf - std::snprintf(temp, sizeof(temp), "%1.8e", data.as_float[i]); - s += temp; + { + std::ostringstream ss; + ss.imbue(std::locale::classic()); + ss << std::fixed << data.as_float[i]; + s += ss.str(); + } break; default: assert(false); diff --git a/dep/reshadefx/src/effect_codegen_hlsl.cpp b/dep/reshadefx/src/effect_codegen_hlsl.cpp index 50ad26708..08d9849dd 100644 --- a/dep/reshadefx/src/effect_codegen_hlsl.cpp +++ b/dep/reshadefx/src/effect_codegen_hlsl.cpp @@ -11,6 +11,9 @@ #include #include // stricmp #include // std::find_if, std::max +#include +#include +#include using namespace reshadefx; @@ -339,9 +342,12 @@ private: s += std::signbit(data.as_float[i]) ? "1.#INF" : "-1.#INF"; break; } - char temp[64]; // Will be null-terminated by snprintf - std::snprintf(temp, sizeof(temp), "%1.8e", data.as_float[i]); - s += temp; + { + std::ostringstream ss; + ss.imbue(std::locale::classic()); + ss << std::fixed << data.as_float[i]; + s += ss.str(); + } break; default: assert(false);