diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 7dad8333925..3992a658ee1 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -112,6 +112,7 @@ public: CommandLine m_commandLine; Environment m_environment; + QByteArray m_writeData; bool m_haveEnv = false; bool m_useCtrlCStub = false; bool m_lowPriority = false; @@ -228,6 +229,8 @@ void QtcProcess::setUseCtrlCStub(bool enabled) void QtcProcess::start() { + QTC_CHECK(d->m_writeData.isEmpty()); // FIXME: Use it. + if (d->m_commandLine.executable().needsDevice()) { QTC_ASSERT(s_remoteRunProcessHook, return); s_remoteRunProcessHook(*this); @@ -780,6 +783,11 @@ void QtcProcess::setExitCodeInterpreter(const ExitCodeInterpreter &interpreter) d->m_exitCodeInterpreter = interpreter; } +void QtcProcess::setWriteData(const QByteArray &writeData) +{ + d->m_writeData = writeData; +} + #ifdef QT_GUI_LIB static bool isGuiThread() { @@ -787,7 +795,7 @@ static bool isGuiThread() } #endif -void QtcProcess::run(const CommandLine &cmd, const QByteArray &writeData) +void QtcProcess::run(const CommandLine &cmd) { // FIXME: Implement properly if (cmd.executable().needsDevice()) { @@ -815,13 +823,13 @@ void QtcProcess::run(const CommandLine &cmd, const QByteArray &writeData) // quoting of arguments than using QProcess::setArguments() beforehand and calling start() // only with the OpenMode setCommand(cmd); - if (!writeData.isEmpty()) { - connect(this, &QProcess::started, this, [this, writeData] { - write(writeData); + if (!d->m_writeData.isEmpty()) { + connect(this, &QProcess::started, this, [this] { + write(d->m_writeData); closeWriteChannel(); }); } - setOpenMode(writeData.isEmpty() ? QIODevice::ReadOnly : QIODevice::ReadWrite); + setOpenMode(d->m_writeData.isEmpty() ? QIODevice::ReadOnly : QIODevice::ReadWrite); start(); // On Windows, start failure is triggered immediately if the diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index a7a12ce896b..33c8999827e 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -86,8 +86,11 @@ public: void setTimeOutMessageBoxEnabled(bool); void setExitCodeInterpreter(const std::function &interpreter); + // FIXME: This is currently only used in run(), not in start() + void setWriteData(const QByteArray &writeData); + // Starts a nested event loop and runs the command - void run(const CommandLine &cmd, const QByteArray &writeData = {}); + void run(const CommandLine &cmd); // Starts the command blocking the UI fully void runBlocking(const CommandLine &cmd); diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 8080c7f680d..967432341c0 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -721,8 +721,9 @@ SdkToolResult AndroidManager::runCommand(const CommandLine &command, Android::SdkToolResult cmdResult; SynchronousProcess cmdProc; cmdProc.setTimeoutS(timeoutS); + cmdProc.setWriteData(writeData); qCDebug(androidManagerLog) << "Running command (sync):" << command.toUserOutput(); - cmdProc.run(command, writeData); + cmdProc.run(command); cmdResult.m_stdOut = cmdProc.stdOut().trimmed(); cmdResult.m_stdErr = cmdProc.stdErr().trimmed(); cmdResult.m_success = cmdProc.result() == QtcProcess::Finished;