summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform/windows/godot_win.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/platform/windows/godot_win.cpp b/platform/windows/godot_win.cpp
index 2999a9beae..ddfadf98ca 100644
--- a/platform/windows/godot_win.cpp
+++ b/platform/windows/godot_win.cpp
@@ -29,6 +29,7 @@
#include "os_windows.h"
#include "main/main.h"
#include <stdio.h>
+#include <locale.h>
PCHAR*
CommandLineToArgvA(
@@ -114,15 +115,45 @@ PCHAR*
return argv;
}
+char* mb_to_utf8(const char* mbs) {
+ int wlen = MultiByteToWideChar(CP_ACP,0,mbs,-1,NULL,0);
+ if (wlen < 0)
+ wlen = 0;
+ wchar_t *wbuf = new wchar_t[wlen + 1];
+ MultiByteToWideChar(CP_ACP,0,mbs,-1,wbuf,wlen);
+ wbuf[wlen]=0;
+
+ int ulen = WideCharToMultiByte(CP_UTF8,0,wbuf,-1,NULL,0,NULL,NULL);
+ if (ulen < 0)
+ ulen = 0;
+ char * ubuf = new char[ulen + 1];
+ WideCharToMultiByte(CP_UTF8,0,wbuf,-1,ubuf,ulen,NULL,NULL);
+ ubuf[ulen] = 0;
+ return ubuf;
+}
+
int main(int argc, char** argv) {
OS_Windows os(NULL);
- Main::setup(argv[0], argc - 1, &argv[1]);
+ setlocale(LC_CTYPE, "");
+
+ char ** argv_utf8 = new char*[argc];
+ for(int i=0; i<argc; ++i) {
+ argv_utf8[i] = mb_to_utf8(argv[i]);
+ }
+
+ Main::setup(argv_utf8[0], argc - 1, &argv_utf8[1]);
if (Main::start())
os.run();
Main::cleanup();
+
+ for (int i=0; i<argc; ++i) {
+ delete[] argv_utf8[i];
+ }
+ delete[] argv_utf8;
+
return os.get_exit_code();
};