diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-04-19 11:51:24 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-04-23 18:10:50 +0000 |
commit | b137734e6b67dc6b9615c1d200e9f9c5a3b8fee7 (patch) | |
tree | 815cd8e82c27939e31756770c6ecc485214eef2c /src/corelib/io/qprocess_win.cpp | |
parent | 3cb4bbfc2644724cfcc0267b84f8979ceb7b08e6 (diff) |
Support setCreateProcessArgumentsModifier in QProcess:startDetached
Factor out both CreateProcess calls into one function that also calls
the modifier callback for the CreateProcessArguments struct.
Task-number: QTBUG-57687
Change-Id: I9d2ef4f2d7cd077aa4c3eba926ab4dfb9e570291
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/io/qprocess_win.cpp')
-rw-r--r-- | src/corelib/io/qprocess_win.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp index cca910bcc0..6643e46bab 100644 --- a/src/corelib/io/qprocess_win.cpp +++ b/src/corelib/io/qprocess_win.cpp @@ -458,6 +458,16 @@ static QByteArray qt_create_environment(const QProcessEnvironmentPrivate::Hash & return envlist; } +bool QProcessPrivate::callCreateProcess(QProcess::CreateProcessArguments *cpargs) +{ + if (modifyCreateProcessArgs) + modifyCreateProcessArgs(cpargs); + return CreateProcess(cpargs->applicationName, cpargs->arguments, cpargs->processAttributes, + cpargs->threadAttributes, cpargs->inheritHandles, cpargs->flags, + cpargs->environment, cpargs->currentDirectory, cpargs->startupInfo, + cpargs->processInformation); +} + void QProcessPrivate::startProcess() { Q_Q(QProcess); @@ -516,12 +526,7 @@ void QProcessPrivate::startProcess() nativeWorkingDirectory.isEmpty() ? Q_NULLPTR : (wchar_t*)nativeWorkingDirectory.utf16(), &startupInfo, pid }; - if (modifyCreateProcessArgs) - modifyCreateProcessArgs(&cpargs); - success = CreateProcess(cpargs.applicationName, cpargs.arguments, cpargs.processAttributes, - cpargs.threadAttributes, cpargs.inheritHandles, cpargs.flags, - cpargs.environment, cpargs.currentDirectory, cpargs.startupInfo, - cpargs.processInformation); + success = callCreateProcess(&cpargs); QString errorString; if (!success) { @@ -886,10 +891,14 @@ bool QProcessPrivate::startDetached(qint64 *pid) (ulong)CW_USEDEFAULT, (ulong)CW_USEDEFAULT, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - success = CreateProcess(0, (wchar_t*)args.utf16(), - 0, 0, FALSE, dwCreationFlags, envPtr, - workingDirectory.isEmpty() ? 0 : (wchar_t*)workingDirectory.utf16(), - &startupInfo, &pinfo); + QProcess::CreateProcessArguments cpargs = { + nullptr, reinterpret_cast<wchar_t *>(const_cast<ushort *>(args.utf16())), + nullptr, nullptr, false, dwCreationFlags, envPtr, + workingDirectory.isEmpty() + ? nullptr : reinterpret_cast<const wchar_t *>(workingDirectory.utf16()), + &startupInfo, &pinfo + }; + success = callCreateProcess(&cpargs); if (success) { CloseHandle(pinfo.hThread); |