From b137734e6b67dc6b9615c1d200e9f9c5a3b8fee7 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Wed, 19 Apr 2017 11:51:24 +0200 Subject: 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 --- src/corelib/io/qprocess_win.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'src/corelib/io/qprocess_win.cpp') 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(const_cast(args.utf16())), + nullptr, nullptr, false, dwCreationFlags, envPtr, + workingDirectory.isEmpty() + ? nullptr : reinterpret_cast(workingDirectory.utf16()), + &startupInfo, &pinfo + }; + success = callCreateProcess(&cpargs); if (success) { CloseHandle(pinfo.hThread); -- cgit v1.2.3