PKGBUILDs/angleproject/mingw-w64/provide_mbstowcs_s_for_xp.p...

58 lines
1.7 KiB
Diff

--- angleproject/src/libANGLE/renderer/d3d/RendererD3D.cpp.orig 2016-03-23 19:22:28.000000000 +0100
+++ angleproject/src/libANGLE/renderer/d3d/RendererD3D.cpp 2016-03-23 21:24:13.194525939 +0100
@@ -25,9 +25,27 @@
#include "libANGLE/State.h"
#include "libANGLE/VertexArray.h"
+#include <string>
+#include <windows.h>
+
namespace rx
{
+inline std::wstring widen(const char *to_widen)
+{
+ // determine length of original string
+ int len = strlen(to_widen);
+ if(!len) {
+ return std::wstring();
+ }
+ // construct new string of required length
+ std::wstring ret(::MultiByteToWideChar(CP_UTF8, 0, to_widen, len, 0, 0), L'\0');
+ // convert old string to new string
+ ::MultiByteToWideChar(CP_UTF8, 0, to_widen, len, &ret[0], (int)ret.length());
+ // return new string
+ return ret;
+}
+
namespace
{
// If we request a scratch buffer requesting a smaller size this many times,
@@ -639,24 +657,12 @@
void RendererD3D::insertEventMarker(GLsizei length, const char *marker)
{
- std::vector<wchar_t> wcstring (length + 1);
- size_t convertedChars = 0;
- errno_t err = mbstowcs_s(&convertedChars, wcstring.data(), length + 1, marker, _TRUNCATE);
- if (err == 0)
- {
- getAnnotator()->setMarker(wcstring.data());
- }
+ getAnnotator()->setMarker(widen(marker).data());
}
void RendererD3D::pushGroupMarker(GLsizei length, const char *marker)
{
- std::vector<wchar_t> wcstring(length + 1);
- size_t convertedChars = 0;
- errno_t err = mbstowcs_s(&convertedChars, wcstring.data(), length + 1, marker, _TRUNCATE);
- if (err == 0)
- {
- getAnnotator()->beginEvent(wcstring.data());
- }
+ getAnnotator()->beginEvent(widen(marker).data());
}
void RendererD3D::popGroupMarker()