diff --git a/src/blackgui/components/installxswiftbuscomponent.cpp b/src/blackgui/components/installxswiftbuscomponent.cpp index 2446b0bb9..9e115fede 100644 --- a/src/blackgui/components/installxswiftbuscomponent.cpp +++ b/src/blackgui/components/installxswiftbuscomponent.cpp @@ -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); } diff --git a/src/blackmisc/compressutils.cpp b/src/blackmisc/compressutils.cpp index 0c271b554..6fd35b28b 100644 --- a/src/blackmisc/compressutils.cpp +++ b/src/blackmisc/compressutils.cpp @@ -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(); diff --git a/src/blackmisc/stringutils.h b/src/blackmisc/stringutils.h index 43b1652d1..415e0a0d0 100644 --- a/src/blackmisc/stringutils.h +++ b/src/blackmisc/stringutils.h @@ -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) {