From 8941000decf9e4d7212399fe09d2bb8aea581737 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 6 Dec 2024 13:43:02 +0100 Subject: [PATCH] Utils: Use FilePath::processCodec as default when starting processes Can still be overridden for special cases. Change-Id: Ic540974812a8c965603bafd1f1fde4c383f3481d Reviewed-by: Marcus Tillmanns --- src/libs/utils/qtcprocess.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 29de1f01759..cb7f21512ef 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -723,8 +723,8 @@ public: qint64 m_applicationMainThreadId = 0; ProcessResultData m_resultData; - QTextCodec *m_stdOutCodec = QTextCodec::codecForLocale(); - QTextCodec *m_stdErrCodec = QTextCodec::codecForLocale(); + QTextCodec *m_stdOutCodec = nullptr; + QTextCodec *m_stdErrCodec = nullptr; ProcessResult m_result = ProcessResult::StartFailed; ChannelBuffer m_stdOut; @@ -983,10 +983,16 @@ void ProcessPrivate::sendControlSignal(ControlSignal controlSignal) void ProcessPrivate::clearForRun() { + if (!m_stdOutCodec) + m_stdOutCodec = m_setup.m_commandLine.executable().processStdOutCodec(); m_stdOut.clearForRun(); m_stdOut.codec = m_stdOutCodec; + + if (!m_stdErrCodec) + m_stdErrCodec = m_setup.m_commandLine.executable().processStdErrCodec(); m_stdErr.clearForRun(); m_stdErr.codec = m_stdErrCodec; + m_result = ProcessResult::StartFailed; m_startTimestamp = {}; m_doneTimestamp = {}; @@ -1622,12 +1628,14 @@ QByteArray Process::rawStdErr() const QString Process::stdOut() const { QTC_CHECK(d->m_stdOut.keepRawData); + QTC_ASSERT(d->m_stdOutCodec, return {}); // Process was not started return d->m_stdOutCodec->toUnicode(d->m_stdOut.rawData); } QString Process::stdErr() const { QTC_CHECK(d->m_stdErr.keepRawData); + QTC_ASSERT(d->m_stdErrCodec, return {}); // Process was not started return d->m_stdErrCodec->toUnicode(d->m_stdErr.rawData); }