Check if the executable exists before starting

Change-Id: I6d0d4e8885222cc1220c27d7d81e304887302e9b
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2021-08-31 15:24:20 +02:00
parent 9891f3b268
commit 37254cb92c

View File

@@ -374,6 +374,29 @@ public:
emit q->readyReadStandardError(); emit q->readyReadStandardError();
} }
FilePath resolve(const FilePath &workingDir, const FilePath &filePath) const
{
if (filePath.isAbsolutePath())
return filePath;
const FilePath fromWorkingDir = workingDir.absoluteFilePath(filePath);
if (fromWorkingDir.exists() && fromWorkingDir.isExecutableFile())
return fromWorkingDir;
return filePath.searchInPath();
}
void start(const QString &program, const QStringList &arguments, const QByteArray &writeData)
{
const FilePath programFilePath = resolve(m_workingDirectory, FilePath::fromString(program));
if (programFilePath.exists() && programFilePath.isExecutableFile()) {
m_process->start(programFilePath.toString(), arguments, writeData);
} else {
m_process->setErrorString(QLatin1String(
"The program \"%1\" does not exist or is not executable.").arg(program));
slotError(QProcess::FailedToStart);
}
}
QtcProcess *q; QtcProcess *q;
ProcessInterface *m_process; ProcessInterface *m_process;
const ProcessMode m_processMode; const ProcessMode m_processMode;
@@ -586,7 +609,7 @@ void QtcProcess::start()
#endif #endif
// 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.
d->m_process->start(command, QStringList(), d->m_writeData); d->start(command, QStringList(), d->m_writeData);
} else { } else {
if (!success) { if (!success) {
setErrorString(tr("Error in command line.")); setErrorString(tr("Error in command line."));
@@ -595,7 +618,7 @@ void QtcProcess::start()
emit errorOccurred(QProcess::UnknownError); emit errorOccurred(QProcess::UnknownError);
return; return;
} }
d->m_process->start(command, arguments.toUnixArgs(), d->m_writeData); d->start(command, arguments.toUnixArgs(), d->m_writeData);
} }
} }
@@ -877,6 +900,8 @@ void QtcProcess::setProcessChannelMode(QProcess::ProcessChannelMode mode)
QProcess::ProcessError QtcProcess::error() const QProcess::ProcessError QtcProcess::error() const
{ {
if (d->m_startFailure)
return QProcess::FailedToStart;
return d->m_process->error(); return d->m_process->error();
} }