Merge pull request #187 from marynate/PR-fix-windows-utf8

Fixed bug: Godot wont start in windows when inside non-ascii directory
This commit is contained in:
reduz 2014-03-12 08:47:10 -07:00
commit 30aaca25d6
1 changed files with 29 additions and 1 deletions

View File

@ -29,6 +29,7 @@
#include "os_windows.h" #include "os_windows.h"
#include "main/main.h" #include "main/main.h"
#include <stdio.h> #include <stdio.h>
#include <locale.h>
PCHAR* PCHAR*
CommandLineToArgvA( CommandLineToArgvA(
@ -114,15 +115,42 @@ PCHAR*
return argv; return argv;
} }
char* mb_to_utf8(const char* mbs) {
int wlen = MultiByteToWideChar(CP_ACP,0,mbs,-1,NULL,0); // returns 0 if failed
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);
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) { int main(int argc, char** argv) {
OS_Windows os(NULL); 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()) if (Main::start())
os.run(); os.run();
Main::cleanup(); Main::cleanup();
for (int i=0; i<argc; ++i) {
delete[] argv_utf8[i];
}
delete[] argv_utf8;
return os.get_exit_code(); return os.get_exit_code();
}; };