summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp21
-rw-r--r--src/corelib/kernel/qcoreapplication_p.h3
2 files changed, 17 insertions, 7 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 41ebc95708..f443e8f37c 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -414,7 +414,8 @@ QCoreApplicationPrivate::QCoreApplicationPrivate(int &aargc, char **aargv, uint
argc(aargc)
, argv(aargv)
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
- , modifiedArgv(false)
+ , origArgc(0)
+ , origArgv(Q_NULLPTR)
#endif
, application_type(QCoreApplicationPrivate::Tty)
#ifndef QT_NO_QOBJECT
@@ -432,7 +433,11 @@ QCoreApplicationPrivate::QCoreApplicationPrivate(int &aargc, char **aargv, uint
argv = (char **)∅
}
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
- modifiedArgv = isArgvModified(argc, argv);
+ if (!isArgvModified(argc, argv)) {
+ origArgc = argc;
+ origArgv = new char *[argc];
+ std::copy(argv, argv + argc, origArgv);
+ }
#endif // Q_OS_WIN && !Q_OS_WINRT
#ifndef QT_NO_QOBJECT
@@ -458,6 +463,9 @@ QCoreApplicationPrivate::~QCoreApplicationPrivate()
#ifndef QT_NO_QOBJECT
cleanupThreadData();
#endif
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
+ delete [] origArgv;
+#endif
QCoreApplicationPrivate::clearApplicationFilePath();
}
@@ -2194,11 +2202,12 @@ QStringList QCoreApplication::arguments()
}
#endif // Q_OS_WINCE
- if (!self->d_func()->modifiedArgv) {
+ const QCoreApplicationPrivate *d = self->d_func();
+ if (d->origArgv) {
const QStringList allArguments = qWinCmdArgs(cmdline);
- Q_ASSERT(allArguments.size() == __argc);
- for (int i = 0; i < __argc; ++i) {
- if (contains(ac, av, __argv[i]))
+ Q_ASSERT(allArguments.size() == d->origArgc);
+ for (int i = 0; i < d->origArgc; ++i) {
+ if (contains(ac, av, d->origArgv[i]))
list.append(allArguments.at(i));
}
return list;
diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h
index 2b03fe2382..463b115f75 100644
--- a/src/corelib/kernel/qcoreapplication_p.h
+++ b/src/corelib/kernel/qcoreapplication_p.h
@@ -116,7 +116,8 @@ public:
int &argc;
char **argv;
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
- bool modifiedArgv;
+ int origArgc;
+ char **origArgv; // store unmodified arguments for QCoreApplication::arguments()
#endif
void appendApplicationPathToLibraryPaths(void);