Commit e93ee5d7b1c878bfd6ba1a7c7299cb8749b00197

Ryan C. Gordon 2015-02-19T21:44:41

Windows: Support unicode arguments for console applications (thanks, Jorgen!). Fixes Bugzilla #2864.

diff --git a/src/main/windows/SDL_windows_main.c b/src/main/windows/SDL_windows_main.c
index 7886fe3..69634a2 100644
--- a/src/main/windows/SDL_windows_main.c
+++ b/src/main/windows/SDL_windows_main.c
@@ -109,13 +109,16 @@ OutOfMemory(void)
 }
 
 #if defined(_MSC_VER)
-/* The VC++ compiler needs main defined */
-#define console_main main
+/* The VC++ compiler needs main/wmain defined */
+# define console_utf8_main main
+# if UNICODE
+#  define console_wmain wmain
+# endif
 #endif
 
-/* This is where execution begins [console apps] */
+/* This is where execution begins [console apps, ansi] */
 int
-console_main(int argc, char *argv[])
+console_utf8_main(int argc, char *argv[])
 {
     SDL_SetMainReady();
 
@@ -123,6 +126,22 @@ console_main(int argc, char *argv[])
     return SDL_main(argc, argv);
 }
 
+#if UNICODE
+/* This is where execution begins [console apps, unicode] */
+int
+console_wmain(int argc, wchar_t *wargv[], wchar_t *wenvp)
+{
+    char **argv = SDL_stack_alloc(char*, argc);
+    int i;
+
+    for (i = 0; i < argc; ++i) {
+        argv[i] = WIN_StringToUTF8(wargv[i]);
+    }
+
+    return console_utf8_main(argc, argv);
+}
+#endif
+
 /* This is where execution begins [windowed apps] */
 int WINAPI
 WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw)
@@ -151,7 +170,7 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw)
     ParseCommandLine(cmdline, argv);
 
     /* Run the main program */
-    console_main(argc, argv);
+    console_utf8_main(argc, argv);
 
     SDL_stack_free(argv);