Browse Source

windows unicode support

David Rose 14 years ago
parent
commit
53f656f028
1 changed files with 23 additions and 1 deletions
  1. 23 1
      panda/src/dxml/tinyxml.cpp

+ 23 - 1
panda/src/dxml/tinyxml.cpp

@@ -28,6 +28,9 @@ distribution.
 #include <sstream>
 #include <sstream>
 #include <iostream>
 #include <iostream>
 #endif
 #endif
+#ifdef _WIN32
+#include <windows.h>
+#endif  // _WIN32
 
 
 #include "tinyxml.h"
 #include "tinyxml.h"
 
 
@@ -40,7 +43,26 @@ FILE* TiXmlFOpen( const char* filename, const char* mode )
 {
 {
 	#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
 	#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
 		FILE* fp = 0;
 		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 )
 		if ( !err && fp )
 			return fp;
 			return fp;
 		return 0;
 		return 0;