+#ifdef WIN32
+ /* Replace argv[1..n] with unicode for Windows NT and above */
+ if( GetVersion() < 0x80000000 )
+ {
+ wchar_t **wargv, **wenvp;
+ int i,i_wargc;
+ int si = { 0 };
+ __wgetmainargs(&i_wargc, &wargv, &wenvp, 0, &si);
+
+ for( i = 0; i < i_wargc; i++ )
+ {
+ int len = WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, NULL, 0, NULL, NULL);
+ if( len > 0 )
+ {
+ if( len > 1 ) {
+ char *utf8arg = (char *)malloc(len);
+ if( NULL != utf8arg )
+ {
+ WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, utf8arg, len, NULL, NULL);
+ ppsz_argv[i] = utf8arg;
+ }
+ else
+ {
+ /* failed!, quit */
+ return 1;
+ }
+ }
+ else
+ {
+ ppsz_argv[i] = strdup ("");
+ }
+ }
+ else
+ {
+ /* failed!, quit */
+ return 1;
+ }
+ }
+ }
+ else
+#endif
+ {
+ for (int i = 0; i < i_argc; i++)
+ if ((ppsz_argv[i] = FromLocale (ppsz_argv[i])) == NULL)
+ return 1; // BOOM!
+ }
+