forked from qt-creator/qt-creator
ProcessInterface: Get rid of ProcessInterface::Ptr
Keep the setup data on stack instead on heap. Task-number: QTCREATORBUG-27358 Change-Id: I0fffd525e2bd4f46533804e3b88fe5b330d02a91 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -374,7 +374,7 @@ QStringList CallerHandle::arguments() const
|
|||||||
return m_arguments;
|
return m_arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CallerHandle::setProcessSetupData(const ProcessSetupData::Ptr &setup)
|
void CallerHandle::setProcessSetupData(ProcessSetupData *setup)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(isCalledFromCallersThread(), return);
|
QTC_ASSERT(isCalledFromCallersThread(), return);
|
||||||
m_setup = setup;
|
m_setup = setup;
|
||||||
|
@@ -105,7 +105,7 @@ public:
|
|||||||
QString program() const;
|
QString program() const;
|
||||||
// Called from caller's or launcher's thread.
|
// Called from caller's or launcher's thread.
|
||||||
QStringList arguments() const;
|
QStringList arguments() const;
|
||||||
void setProcessSetupData(const ProcessSetupData::Ptr &setup);
|
void setProcessSetupData(ProcessSetupData *setup);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void started(qint64 processId, qint64 applicationMainThreadId = 0);
|
void started(qint64 processId, qint64 applicationMainThreadId = 0);
|
||||||
@@ -152,7 +152,7 @@ private:
|
|||||||
|
|
||||||
QString m_command;
|
QString m_command;
|
||||||
QStringList m_arguments;
|
QStringList m_arguments;
|
||||||
ProcessSetupData::Ptr m_setup;
|
ProcessSetupData *m_setup = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Moved to the launcher thread, returned to caller's thread.
|
// Moved to the launcher thread, returned to caller's thread.
|
||||||
|
@@ -38,8 +38,6 @@ namespace Utils {
|
|||||||
class QTCREATOR_UTILS_EXPORT ProcessSetupData
|
class QTCREATOR_UTILS_EXPORT ProcessSetupData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Ptr = std::shared_ptr<ProcessSetupData>;
|
|
||||||
|
|
||||||
ProcessImpl m_processImpl = ProcessImpl::Default;
|
ProcessImpl m_processImpl = ProcessImpl::Default;
|
||||||
ProcessMode m_processMode = ProcessMode::Reader;
|
ProcessMode m_processMode = ProcessMode::Reader;
|
||||||
TerminalMode m_terminalMode = TerminalMode::Off;
|
TerminalMode m_terminalMode = TerminalMode::Off;
|
||||||
@@ -83,7 +81,7 @@ class QTCREATOR_UTILS_EXPORT ProcessInterface : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ProcessInterface(QObject *parent = nullptr) : QObject(parent), m_setup(new ProcessSetupData) {}
|
ProcessInterface(QObject *parent = nullptr) : QObject(parent) {}
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
// This should be emitted when being in Starting state only.
|
// This should be emitted when being in Starting state only.
|
||||||
@@ -99,7 +97,7 @@ signals:
|
|||||||
void done(const Utils::ProcessResultData &resultData);
|
void done(const Utils::ProcessResultData &resultData);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ProcessSetupData::Ptr m_setup;
|
ProcessSetupData m_setup;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// It's being called only in Starting state. Just before this method is being called,
|
// It's being called only in Starting state. Just before this method is being called,
|
||||||
|
@@ -245,7 +245,7 @@ void DefaultImpl::start()
|
|||||||
<< "Process " << currentNumber << " starting ("
|
<< "Process " << currentNumber << " starting ("
|
||||||
<< qPrintable(blockingMessage(property(QTC_PROCESS_BLOCKING_TYPE)))
|
<< qPrintable(blockingMessage(property(QTC_PROCESS_BLOCKING_TYPE)))
|
||||||
<< "): "
|
<< "): "
|
||||||
<< m_setup->m_commandLine.toUserOutput();
|
<< m_setup.m_commandLine.toUserOutput();
|
||||||
setProperty(QTC_PROCESS_NUMBER, currentNumber);
|
setProperty(QTC_PROCESS_NUMBER, currentNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,26 +260,26 @@ void DefaultImpl::start()
|
|||||||
|
|
||||||
bool DefaultImpl::dissolveCommand(QString *program, QStringList *arguments)
|
bool DefaultImpl::dissolveCommand(QString *program, QStringList *arguments)
|
||||||
{
|
{
|
||||||
const CommandLine &commandLine = m_setup->m_commandLine;
|
const CommandLine &commandLine = m_setup.m_commandLine;
|
||||||
QString commandString;
|
QString commandString;
|
||||||
ProcessArgs processArgs;
|
ProcessArgs processArgs;
|
||||||
const bool success = ProcessArgs::prepareCommand(commandLine, &commandString, &processArgs,
|
const bool success = ProcessArgs::prepareCommand(commandLine, &commandString, &processArgs,
|
||||||
&m_setup->m_environment,
|
&m_setup.m_environment,
|
||||||
&m_setup->m_workingDirectory);
|
&m_setup.m_workingDirectory);
|
||||||
|
|
||||||
if (commandLine.executable().osType() == OsTypeWindows) {
|
if (commandLine.executable().osType() == OsTypeWindows) {
|
||||||
QString args;
|
QString args;
|
||||||
if (m_setup->m_useCtrlCStub) {
|
if (m_setup.m_useCtrlCStub) {
|
||||||
if (m_setup->m_lowPriority)
|
if (m_setup.m_lowPriority)
|
||||||
ProcessArgs::addArg(&args, "-nice");
|
ProcessArgs::addArg(&args, "-nice");
|
||||||
ProcessArgs::addArg(&args, QDir::toNativeSeparators(commandString));
|
ProcessArgs::addArg(&args, QDir::toNativeSeparators(commandString));
|
||||||
commandString = QCoreApplication::applicationDirPath()
|
commandString = QCoreApplication::applicationDirPath()
|
||||||
+ QLatin1String("/qtcreator_ctrlc_stub.exe");
|
+ QLatin1String("/qtcreator_ctrlc_stub.exe");
|
||||||
} else if (m_setup->m_lowPriority) {
|
} else if (m_setup.m_lowPriority) {
|
||||||
m_setup->m_belowNormalPriority = true;
|
m_setup.m_belowNormalPriority = true;
|
||||||
}
|
}
|
||||||
ProcessArgs::addArgs(&args, processArgs.toWindowsArgs());
|
ProcessArgs::addArgs(&args, processArgs.toWindowsArgs());
|
||||||
m_setup->m_nativeArguments = args;
|
m_setup.m_nativeArguments = args;
|
||||||
// Note: Arguments set with setNativeArgs will be appended to the ones
|
// Note: Arguments set with setNativeArgs will be appended to the ones
|
||||||
// passed with start() below.
|
// passed with start() below.
|
||||||
*arguments = QStringList();
|
*arguments = QStringList();
|
||||||
@@ -309,7 +309,7 @@ static FilePath resolve(const FilePath &workingDir, const FilePath &filePath)
|
|||||||
|
|
||||||
bool DefaultImpl::ensureProgramExists(const QString &program)
|
bool DefaultImpl::ensureProgramExists(const QString &program)
|
||||||
{
|
{
|
||||||
const FilePath programFilePath = resolve(m_setup->m_workingDirectory,
|
const FilePath programFilePath = resolve(m_setup.m_workingDirectory,
|
||||||
FilePath::fromString(program));
|
FilePath::fromString(program));
|
||||||
if (programFilePath.exists() && programFilePath.isExecutableFile())
|
if (programFilePath.exists() && programFilePath.isExecutableFile())
|
||||||
return true;
|
return true;
|
||||||
@@ -370,19 +370,19 @@ private:
|
|||||||
void doDefaultStart(const QString &program, const QStringList &arguments) final
|
void doDefaultStart(const QString &program, const QStringList &arguments) final
|
||||||
{
|
{
|
||||||
ProcessStartHandler *handler = m_process->processStartHandler();
|
ProcessStartHandler *handler = m_process->processStartHandler();
|
||||||
handler->setProcessMode(m_setup->m_processMode);
|
handler->setProcessMode(m_setup.m_processMode);
|
||||||
handler->setWriteData(m_setup->m_writeData);
|
handler->setWriteData(m_setup.m_writeData);
|
||||||
if (m_setup->m_belowNormalPriority)
|
if (m_setup.m_belowNormalPriority)
|
||||||
handler->setBelowNormalPriority();
|
handler->setBelowNormalPriority();
|
||||||
handler->setNativeArguments(m_setup->m_nativeArguments);
|
handler->setNativeArguments(m_setup.m_nativeArguments);
|
||||||
m_process->setProcessEnvironment(m_setup->m_environment.toProcessEnvironment());
|
m_process->setProcessEnvironment(m_setup.m_environment.toProcessEnvironment());
|
||||||
m_process->setWorkingDirectory(m_setup->m_workingDirectory.path());
|
m_process->setWorkingDirectory(m_setup.m_workingDirectory.path());
|
||||||
m_process->setStandardInputFile(m_setup->m_standardInputFile);
|
m_process->setStandardInputFile(m_setup.m_standardInputFile);
|
||||||
if (m_setup->m_lowPriority)
|
if (m_setup.m_lowPriority)
|
||||||
m_process->setLowPriority();
|
m_process->setLowPriority();
|
||||||
if (m_setup->m_unixTerminalDisabled)
|
if (m_setup.m_unixTerminalDisabled)
|
||||||
m_process->setUnixTerminalDisabled();
|
m_process->setUnixTerminalDisabled();
|
||||||
m_process->setUseCtrlCStub(m_setup->m_useCtrlCStub);
|
m_process->setUseCtrlCStub(m_setup.m_useCtrlCStub);
|
||||||
m_process->start(program, arguments, handler->openMode());
|
m_process->start(program, arguments, handler->openMode());
|
||||||
handler->handleProcessStart();
|
handler->handleProcessStart();
|
||||||
}
|
}
|
||||||
@@ -425,7 +425,7 @@ public:
|
|||||||
ProcessLauncherImpl() : m_token(uniqueToken())
|
ProcessLauncherImpl() : m_token(uniqueToken())
|
||||||
{
|
{
|
||||||
m_handle = LauncherInterface::registerHandle(this, token());
|
m_handle = LauncherInterface::registerHandle(this, token());
|
||||||
m_handle->setProcessSetupData(m_setup);
|
m_handle->setProcessSetupData(&m_setup);
|
||||||
connect(m_handle, &CallerHandle::started,
|
connect(m_handle, &CallerHandle::started,
|
||||||
this, &ProcessInterface::started);
|
this, &ProcessInterface::started);
|
||||||
connect(m_handle, &CallerHandle::readyRead,
|
connect(m_handle, &CallerHandle::readyRead,
|
||||||
@@ -451,7 +451,7 @@ private:
|
|||||||
m_handle->kill();
|
m_handle->kill();
|
||||||
break;
|
break;
|
||||||
case ControlSignal::Interrupt:
|
case ControlSignal::Interrupt:
|
||||||
if (m_setup->m_useCtrlCStub) // bypass launcher and interrupt directly
|
if (m_setup.m_useCtrlCStub) // bypass launcher and interrupt directly
|
||||||
ProcessHelper::interruptPid(m_handle->processId());
|
ProcessHelper::interruptPid(m_handle->processId());
|
||||||
break;
|
break;
|
||||||
case ControlSignal::KickOff:
|
case ControlSignal::KickOff:
|
||||||
@@ -799,9 +799,9 @@ void QtcProcess::start()
|
|||||||
QTC_ASSERT(processImpl, return);
|
QTC_ASSERT(processImpl, return);
|
||||||
d->clearForRun();
|
d->clearForRun();
|
||||||
d->setProcessInterface(processImpl);
|
d->setProcessInterface(processImpl);
|
||||||
*d->m_process->m_setup = d->m_setup;
|
d->m_process->m_setup = d->m_setup;
|
||||||
d->m_process->m_setup->m_commandLine = d->fullCommandLine();
|
d->m_process->m_setup.m_commandLine = d->fullCommandLine();
|
||||||
d->m_process->m_setup->m_environment = d->fullEnvironment();
|
d->m_process->m_setup.m_environment = d->fullEnvironment();
|
||||||
if (processLog().isDebugEnabled()) {
|
if (processLog().isDebugEnabled()) {
|
||||||
// Pass a dynamic property with info about blocking type
|
// Pass a dynamic property with info about blocking type
|
||||||
d->m_process->setProperty(QTC_PROCESS_BLOCKING_TYPE, property(QTC_PROCESS_BLOCKING_TYPE));
|
d->m_process->setProperty(QTC_PROCESS_BLOCKING_TYPE, property(QTC_PROCESS_BLOCKING_TYPE));
|
||||||
|
@@ -174,13 +174,13 @@ void TerminalImpl::start()
|
|||||||
|
|
||||||
QString pcmd;
|
QString pcmd;
|
||||||
QString pargs;
|
QString pargs;
|
||||||
if (m_setup->m_terminalMode != TerminalMode::Run) { // The debugger engines already pre-process the arguments.
|
if (m_setup.m_terminalMode != TerminalMode::Run) { // The debugger engines already pre-process the arguments.
|
||||||
pcmd = m_setup->m_commandLine.executable().toString();
|
pcmd = m_setup.m_commandLine.executable().toString();
|
||||||
pargs = m_setup->m_commandLine.arguments();
|
pargs = m_setup.m_commandLine.arguments();
|
||||||
} else {
|
} else {
|
||||||
ProcessArgs outArgs;
|
ProcessArgs outArgs;
|
||||||
ProcessArgs::prepareCommand(m_setup->m_commandLine, &pcmd, &outArgs,
|
ProcessArgs::prepareCommand(m_setup.m_commandLine, &pcmd, &outArgs,
|
||||||
&m_setup->m_environment, &m_setup->m_workingDirectory);
|
&m_setup.m_environment, &m_setup.m_workingDirectory);
|
||||||
pargs = outArgs.toWindowsArgs();
|
pargs = outArgs.toWindowsArgs();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +190,7 @@ void TerminalImpl::start()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList env = m_setup->m_environment.toStringList();
|
QStringList env = m_setup.m_environment.toStringList();
|
||||||
if (!env.isEmpty()) {
|
if (!env.isEmpty()) {
|
||||||
d->m_tempFile = new QTemporaryFile();
|
d->m_tempFile = new QTemporaryFile();
|
||||||
if (!d->m_tempFile->open()) {
|
if (!d->m_tempFile->open()) {
|
||||||
@@ -237,7 +237,7 @@ void TerminalImpl::start()
|
|||||||
d->m_pid = new PROCESS_INFORMATION;
|
d->m_pid = new PROCESS_INFORMATION;
|
||||||
ZeroMemory(d->m_pid, sizeof(PROCESS_INFORMATION));
|
ZeroMemory(d->m_pid, sizeof(PROCESS_INFORMATION));
|
||||||
|
|
||||||
QString workDir = m_setup->m_workingDirectory.toUserOutput();
|
QString workDir = m_setup.m_workingDirectory.toUserOutput();
|
||||||
if (!workDir.isEmpty() && !workDir.endsWith(QLatin1Char('\\')))
|
if (!workDir.isEmpty() && !workDir.endsWith(QLatin1Char('\\')))
|
||||||
workDir.append(QLatin1Char('\\'));
|
workDir.append(QLatin1Char('\\'));
|
||||||
|
|
||||||
@@ -293,7 +293,7 @@ void TerminalImpl::start()
|
|||||||
};
|
};
|
||||||
|
|
||||||
QStringList stubArgs;
|
QStringList stubArgs;
|
||||||
stubArgs << modeOption(m_setup->m_terminalMode)
|
stubArgs << modeOption(m_setup.m_terminalMode)
|
||||||
<< d->m_stubServer.fullServerName()
|
<< d->m_stubServer.fullServerName()
|
||||||
<< workDir
|
<< workDir
|
||||||
<< (d->m_tempFile ? d->m_tempFile->fileName() : QString())
|
<< (d->m_tempFile ? d->m_tempFile->fileName() : QString())
|
||||||
@@ -324,22 +324,22 @@ void TerminalImpl::start()
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
ProcessArgs::SplitError perr;
|
ProcessArgs::SplitError perr;
|
||||||
ProcessArgs pargs = ProcessArgs::prepareArgs(m_setup->m_commandLine.arguments(),
|
ProcessArgs pargs = ProcessArgs::prepareArgs(m_setup.m_commandLine.arguments(),
|
||||||
&perr,
|
&perr,
|
||||||
HostOsInfo::hostOs(),
|
HostOsInfo::hostOs(),
|
||||||
&m_setup->m_environment,
|
&m_setup.m_environment,
|
||||||
&m_setup->m_workingDirectory,
|
&m_setup.m_workingDirectory,
|
||||||
m_setup->m_abortOnMetaChars);
|
m_setup.m_abortOnMetaChars);
|
||||||
|
|
||||||
QString pcmd;
|
QString pcmd;
|
||||||
if (perr == ProcessArgs::SplitOk) {
|
if (perr == ProcessArgs::SplitOk) {
|
||||||
pcmd = m_setup->m_commandLine.executable().toString();
|
pcmd = m_setup.m_commandLine.executable().toString();
|
||||||
} else {
|
} else {
|
||||||
if (perr != ProcessArgs::FoundMeta) {
|
if (perr != ProcessArgs::FoundMeta) {
|
||||||
emitError(QProcess::FailedToStart, tr("Quoting error in command."));
|
emitError(QProcess::FailedToStart, tr("Quoting error in command."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (m_setup->m_terminalMode == TerminalMode::Debug) {
|
if (m_setup.m_terminalMode == TerminalMode::Debug) {
|
||||||
// FIXME: QTCREATORBUG-2809
|
// FIXME: QTCREATORBUG-2809
|
||||||
emitError(QProcess::FailedToStart, tr("Debugging complex shell commands in a terminal"
|
emitError(QProcess::FailedToStart, tr("Debugging complex shell commands in a terminal"
|
||||||
" is currently not supported."));
|
" is currently not supported."));
|
||||||
@@ -347,8 +347,8 @@ void TerminalImpl::start()
|
|||||||
}
|
}
|
||||||
pcmd = qEnvironmentVariable("SHELL", "/bin/sh");
|
pcmd = qEnvironmentVariable("SHELL", "/bin/sh");
|
||||||
pargs = ProcessArgs::createUnixArgs(
|
pargs = ProcessArgs::createUnixArgs(
|
||||||
{"-c", (ProcessArgs::quoteArg(m_setup->m_commandLine.executable().toString())
|
{"-c", (ProcessArgs::quoteArg(m_setup.m_commandLine.executable().toString())
|
||||||
+ ' ' + m_setup->m_commandLine.arguments())});
|
+ ' ' + m_setup.m_commandLine.arguments())});
|
||||||
}
|
}
|
||||||
|
|
||||||
ProcessArgs::SplitError qerr;
|
ProcessArgs::SplitError qerr;
|
||||||
@@ -356,8 +356,8 @@ void TerminalImpl::start()
|
|||||||
const ProcessArgs terminalArgs = ProcessArgs::prepareArgs(terminal.executeArgs,
|
const ProcessArgs terminalArgs = ProcessArgs::prepareArgs(terminal.executeArgs,
|
||||||
&qerr,
|
&qerr,
|
||||||
HostOsInfo::hostOs(),
|
HostOsInfo::hostOs(),
|
||||||
&m_setup->m_environment,
|
&m_setup.m_environment,
|
||||||
&m_setup->m_workingDirectory);
|
&m_setup.m_workingDirectory);
|
||||||
if (qerr != ProcessArgs::SplitOk) {
|
if (qerr != ProcessArgs::SplitOk) {
|
||||||
emitError(QProcess::FailedToStart, qerr == ProcessArgs::BadQuoting
|
emitError(QProcess::FailedToStart, qerr == ProcessArgs::BadQuoting
|
||||||
? tr("Quoting error in terminal command.")
|
? tr("Quoting error in terminal command.")
|
||||||
@@ -371,9 +371,9 @@ void TerminalImpl::start()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_setup->m_environment.unset(QLatin1String("TERM"));
|
m_setup.m_environment.unset(QLatin1String("TERM"));
|
||||||
|
|
||||||
const QStringList env = m_setup->m_environment.toStringList();
|
const QStringList env = m_setup.m_environment.toStringList();
|
||||||
if (!env.isEmpty()) {
|
if (!env.isEmpty()) {
|
||||||
d->m_tempFile = new QTemporaryFile();
|
d->m_tempFile = new QTemporaryFile();
|
||||||
if (!d->m_tempFile->open()) {
|
if (!d->m_tempFile->open()) {
|
||||||
@@ -397,10 +397,10 @@ void TerminalImpl::start()
|
|||||||
QStringList allArgs = terminalArgs.toUnixArgs();
|
QStringList allArgs = terminalArgs.toUnixArgs();
|
||||||
|
|
||||||
allArgs << stubPath
|
allArgs << stubPath
|
||||||
<< modeOption(m_setup->m_terminalMode)
|
<< modeOption(m_setup.m_terminalMode)
|
||||||
<< d->m_stubServer.fullServerName()
|
<< d->m_stubServer.fullServerName()
|
||||||
<< msgPromptToClose()
|
<< msgPromptToClose()
|
||||||
<< m_setup->m_workingDirectory.path()
|
<< m_setup.m_workingDirectory.path()
|
||||||
<< (d->m_tempFile ? d->m_tempFile->fileName() : QString())
|
<< (d->m_tempFile ? d->m_tempFile->fileName() : QString())
|
||||||
<< QString::number(getpid())
|
<< QString::number(getpid())
|
||||||
<< pcmd
|
<< pcmd
|
||||||
@@ -409,9 +409,9 @@ void TerminalImpl::start()
|
|||||||
if (terminal.needsQuotes)
|
if (terminal.needsQuotes)
|
||||||
allArgs = QStringList { ProcessArgs::joinArgs(allArgs) };
|
allArgs = QStringList { ProcessArgs::joinArgs(allArgs) };
|
||||||
|
|
||||||
d->m_process.setEnvironment(m_setup->m_environment);
|
d->m_process.setEnvironment(m_setup.m_environment);
|
||||||
d->m_process.setCommand({FilePath::fromString(terminal.command), allArgs});
|
d->m_process.setCommand({FilePath::fromString(terminal.command), allArgs});
|
||||||
d->m_process.setProcessImpl(m_setup->m_processImpl);
|
d->m_process.setProcessImpl(m_setup.m_processImpl);
|
||||||
d->m_process.start();
|
d->m_process.start();
|
||||||
if (!d->m_process.waitForStarted()) {
|
if (!d->m_process.waitForStarted()) {
|
||||||
const QString msg = tr("Cannot start the terminal emulator \"%1\", change the setting in the "
|
const QString msg = tr("Cannot start the terminal emulator \"%1\", change the setting in the "
|
||||||
@@ -606,10 +606,10 @@ void TerminalImpl::readStubOutput()
|
|||||||
out.chop(2); // \r\n
|
out.chop(2); // \r\n
|
||||||
if (out.startsWith("err:chdir ")) {
|
if (out.startsWith("err:chdir ")) {
|
||||||
emitError(QProcess::FailedToStart,
|
emitError(QProcess::FailedToStart,
|
||||||
msgCannotChangeToWorkDir(m_setup->m_workingDirectory, winErrorMessage(out.mid(10).toInt())));
|
msgCannotChangeToWorkDir(m_setup.m_workingDirectory, winErrorMessage(out.mid(10).toInt())));
|
||||||
} else if (out.startsWith("err:exec ")) {
|
} else if (out.startsWith("err:exec ")) {
|
||||||
emitError(QProcess::FailedToStart,
|
emitError(QProcess::FailedToStart,
|
||||||
msgCannotExecute(m_setup->m_commandLine.executable().toUserOutput(), winErrorMessage(out.mid(9).toInt())));
|
msgCannotExecute(m_setup.m_commandLine.executable().toUserOutput(), winErrorMessage(out.mid(9).toInt())));
|
||||||
} else if (out.startsWith("thread ")) { // Windows only
|
} else if (out.startsWith("thread ")) { // Windows only
|
||||||
// TODO: ensure that it comes before "pid " comes
|
// TODO: ensure that it comes before "pid " comes
|
||||||
d->m_appMainThreadId = out.mid(7).toLongLong();
|
d->m_appMainThreadId = out.mid(7).toLongLong();
|
||||||
@@ -649,10 +649,10 @@ void TerminalImpl::readStubOutput()
|
|||||||
out.chop(1); // \n
|
out.chop(1); // \n
|
||||||
if (out.startsWith("err:chdir ")) {
|
if (out.startsWith("err:chdir ")) {
|
||||||
emitError(QProcess::FailedToStart,
|
emitError(QProcess::FailedToStart,
|
||||||
msgCannotChangeToWorkDir(m_setup->m_workingDirectory, errorMsg(out.mid(10).toInt())));
|
msgCannotChangeToWorkDir(m_setup.m_workingDirectory, errorMsg(out.mid(10).toInt())));
|
||||||
} else if (out.startsWith("err:exec ")) {
|
} else if (out.startsWith("err:exec ")) {
|
||||||
emitError(QProcess::FailedToStart,
|
emitError(QProcess::FailedToStart,
|
||||||
msgCannotExecute(m_setup->m_commandLine.executable().toString(), errorMsg(out.mid(9).toInt())));
|
msgCannotExecute(m_setup.m_commandLine.executable().toString(), errorMsg(out.mid(9).toInt())));
|
||||||
} else if (out.startsWith("spid ")) {
|
} else if (out.startsWith("spid ")) {
|
||||||
delete d->m_tempFile;
|
delete d->m_tempFile;
|
||||||
d->m_tempFile = nullptr;
|
d->m_tempFile = nullptr;
|
||||||
|
Reference in New Issue
Block a user