summaryrefslogtreecommitdiffstats
path: root/src/winmain
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-06-01 19:44:29 +0200
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-06-01 19:44:29 +0200
commit6e008cd57955c8029671c4c92250b86767f8ec1f (patch)
treead5fe258f7203a733fbdd231918acd540727a2fb /src/winmain
parent275709fb43c154ccb1d95391f4829bd1aecebb12 (diff)
parent6fba3c1904aa7601722a70099d88126191cf60cf (diff)
Merge 5.5 into 5.5.0
Diffstat (limited to 'src/winmain')
-rw-r--r--src/winmain/qtmain_winrt.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/winmain/qtmain_winrt.cpp b/src/winmain/qtmain_winrt.cpp
index 5a44df622a..e68da520e7 100644
--- a/src/winmain/qtmain_winrt.cpp
+++ b/src/winmain/qtmain_winrt.cpp
@@ -222,11 +222,49 @@ private:
// Main entry point for Appx containers
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
+#if _MSC_VER < 1900
int argc = 0;
char **argv, **env;
_startupinfo info = { _query_new_mode() };
if (int init = __getmainargs(&argc, &argv, &env, false, &info))
return init;
+#else
+ QByteArray commandLine = QString::fromWCharArray(GetCommandLine()).toUtf8();
+ QVarLengthArray<char *> args;
+ args.append(commandLine.data());
+ bool quote = false;
+ bool escape = false;
+ for (int i = 0; i < commandLine.size(); ++i) {
+ switch (commandLine.at(i)) {
+ case '\\':
+ escape = true;
+ break;
+ case '"':
+ if (escape) {
+ escape = false;
+ break;
+ }
+ quote = !quote;
+ commandLine[i] = '\0';
+ break;
+ case ' ':
+ if (quote)
+ break;
+ commandLine[i] = '\0';
+ if (args.last()[0] != '\0')
+ args.append(commandLine.data() + i + 1);
+ // fall through
+ default:
+ if (args.last()[0] == '\0')
+ args.last() = commandLine.data() + i;
+ escape = false; // only quotes are escaped
+ break;
+ }
+ }
+ int argc = args.size();
+ char **argv = args.data();
+ char **env = Q_NULLPTR;
+#endif // _MSC_VER >= 1900
for (int i = 0; env && env[i]; ++i) {
QByteArray var(env[i]);