From e93ee5d7b1c878bfd6ba1a7c7299cb8749b00197 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 19 Feb 2015 21:44:41 -0500 Subject: [PATCH] Windows: Support unicode arguments for console applications (thanks, Jorgen!). Fixes Bugzilla #2864. --- src/main/windows/SDL_windows_main.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/windows/SDL_windows_main.c b/src/main/windows/SDL_windows_main.c index 7886fe3a8..69634a291 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);