From 53f656f02820a4d14821236e53a25bd5759b1633 Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 30 Aug 2011 03:02:38 +0000 Subject: [PATCH] windows unicode support --- panda/src/dxml/tinyxml.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/panda/src/dxml/tinyxml.cpp b/panda/src/dxml/tinyxml.cpp index 9be6c6a66c..05c2cc2af4 100644 --- a/panda/src/dxml/tinyxml.cpp +++ b/panda/src/dxml/tinyxml.cpp @@ -28,6 +28,9 @@ distribution. #include #include #endif +#ifdef _WIN32 +#include +#endif // _WIN32 #include "tinyxml.h" @@ -40,7 +43,26 @@ FILE* TiXmlFOpen( const char* filename, const char* mode ) { #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) FILE* fp = 0; - errno_t err = fopen_s( &fp, filename, mode ); + + /* Addition by drwr for Windows wide-character support */ + //errno_t err = fopen_s( &fp, filename, mode ); + errno_t err = 1; + { + int size = MultiByteToWideChar(CP_UTF8, 0, filename, -1, + NULL, 0); + if (size > 0) { + wchar_t *buffer = new wchar_t[size]; + int rc = MultiByteToWideChar(CP_UTF8, 0, filename, -1, + buffer, size); + if (rc != 0) { + buffer[size - 1] = 0; + err = _wfopen_s( &fp, buffer, mode[0] == 'w' ? L"w" : L"rb" ); + } + delete[] buffer; + } + } + /* End wide-character addition */ + if ( !err && fp ) return fp; return 0;