Ref T304, array index fix if "7za.exe" is not available

This commit is contained in:
Klaus Basan
2018-08-12 19:17:55 +02:00
parent 30ba404043
commit 018a60f23c
3 changed files with 27 additions and 1 deletions

View File

@@ -174,7 +174,7 @@ namespace BlackGui
}
else
{
const CStatusMessage msg = CStatusMessage(this, CLogCategory::validation()).warning("Unzip failed: stdout '%1' stderr '%2'") << stdOutAndError[0] << stdOutAndError[1];
const CStatusMessage msg = CStatusMessage(this, CLogCategory::validation()).warning("Unzip failed: stdout '%1' stderr '%2'") << safeAt(stdOutAndError, 0) << safeAt(stdOutAndError, 1);
this->showOverlayMessage(msg);
}

View File

@@ -83,11 +83,29 @@ namespace BlackMisc
const bool win = CBuildConfig::isRunningOnWindowsNtPlatform();
if (!win) { return CCompressUtils::whichZip7(stdOutAndError); }
// windows check
QStringList args;
args << "i";
QProcess zipProcess;
zipProcess.start("7za.exe", args);
const bool finished = zipProcess.waitForFinished();
if (stdOutAndError)
{
stdOutAndError->clear();
const QString pStdout = zipProcess.readAllStandardOutput();
const QString pStderr = zipProcess.readAllStandardError();
if (pStdout.isEmpty() && pStderr.isEmpty())
{
stdOutAndError->push_back("Checking 7za");
stdOutAndError->push_back("No 7za or failing");
}
else
{
stdOutAndError->push_back(pStdout);
stdOutAndError->push_back(pStderr);
}
}
if (zipProcess.exitStatus() != QProcess::NormalExit) { return false; }
if (!finished) { return false; }
const int r = zipProcess.exitCode();

View File

@@ -108,6 +108,14 @@ namespace BlackMisc
return s.trimmed();
}
//! Safe "at" function, returns empty string if index does not exists
inline const QString &safeAt(const QStringList &stringList, int index)
{
if (stringList.size() > index) { return stringList.at(index); }
static const QString empty;
return empty;
}
//! String with digits only
inline bool isDigitsOnlyString(const QString &testString)
{