From 2192415483e2f2f538781858259d20d417463889 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 3 Jun 2021 14:57:51 +0200 Subject: [PATCH] CppCheck: Fix getting output from QtcProcess Change-Id: Ic11d1f31afe7412ec606bdbd751deb4088d5cd3f Reviewed-by: hjk --- src/libs/utils/qtcprocess.cpp | 5 ---- src/libs/utils/qtcprocess.h | 1 - src/plugins/cppcheck/cppcheckrunner.cpp | 32 ++++++++++++------------- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 7ac4ee19322..cadaacef8bc 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -745,11 +745,6 @@ bool QtcProcess::canReadLine() const return d->m_process->canReadLine(); } -bool QtcProcess::atEnd() const -{ - return d->m_process->atEnd(); -} - QString QtcProcess::locateBinary(const QString &binary) { const QByteArray path = qgetenv("PATH"); diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index b79dd3f4303..36a1c6185f3 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -173,7 +173,6 @@ public: void close(); void setReadChannel(QProcess::ProcessChannel channel); bool canReadLine() const; - bool atEnd() const; QIODevice *ioDevice(); // FIXME: Remove. diff --git a/src/plugins/cppcheck/cppcheckrunner.cpp b/src/plugins/cppcheck/cppcheckrunner.cpp index 51ecc0bd71f..458cccd3b81 100644 --- a/src/plugins/cppcheck/cppcheckrunner.cpp +++ b/src/plugins/cppcheck/cppcheckrunner.cpp @@ -163,14 +163,14 @@ void CppcheckRunner::readOutput() if (!m_isRunning) // workaround for QTBUG-30929 handleStarted(); - m_process->setReadChannel(QProcess::StandardOutput); - - while (!m_process->atEnd() && m_process->canReadLine()) { - QString line = QString::fromUtf8(m_process->readLine()); - if (line.endsWith('\n')) - line.chop(1); - m_tool.parseOutputLine(line); - } + const QByteArray output = m_process->readAllStandardOutput(); + int start = 0; + int end; + do { + end = output.indexOf('\n', start); + m_tool.parseOutputLine(QString::fromUtf8(output.mid(start, end - start))); + start = end + 1; + } while (end >= 0); } void CppcheckRunner::readError() @@ -178,14 +178,14 @@ void CppcheckRunner::readError() if (!m_isRunning) // workaround for QTBUG-30929 handleStarted(); - m_process->setReadChannel(QProcess::StandardError); - - while (!m_process->atEnd() && m_process->canReadLine()) { - QString line = QString::fromUtf8(m_process->readLine()); - if (line.endsWith('\n')) - line.chop(1); - m_tool.parseErrorLine(line); - } + const QByteArray output = m_process->readAllStandardError(); + int start = 0; + int end; + do { + end = output.indexOf('\n', start); + m_tool.parseErrorLine(QString::fromUtf8(output.mid(start, end - start))); + start = end + 1; + } while (end >= 0); } void CppcheckRunner::handleStarted()