Utils: Allow different codec for Process stdout and stderr

Change-Id: Ie6a3fb74a447a599c492e38ec83a2330f3cb4cd8
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Marcus Tillmanns
2024-02-23 16:27:58 +01:00
parent 8b4578f0c4
commit d061e29dd3
2 changed files with 25 additions and 8 deletions

View File

@@ -847,7 +847,9 @@ public:
qint64 m_applicationMainThreadId = 0;
ProcessResultData m_resultData;
QTextCodec *m_codec = QTextCodec::codecForLocale();
QTextCodec *m_stdOutCodec = QTextCodec::codecForLocale();
QTextCodec *m_stdErrCodec = QTextCodec::codecForLocale();
ProcessResult m_result = ProcessResult::StartFailed;
ChannelBuffer m_stdOut;
ChannelBuffer m_stdErr;
@@ -1102,9 +1104,9 @@ void ProcessPrivate::sendControlSignal(ControlSignal controlSignal)
void ProcessPrivate::clearForRun()
{
m_stdOut.clearForRun();
m_stdOut.codec = m_codec;
m_stdOut.codec = m_stdOutCodec;
m_stdErr.clearForRun();
m_stdErr.codec = m_codec;
m_stdErr.codec = m_stdErrCodec;
m_result = ProcessResult::StartFailed;
m_startTimestamp = {};
m_doneTimestamp = {};
@@ -1729,13 +1731,13 @@ QByteArray Process::rawStdErr() const
QString Process::stdOut() const
{
QTC_CHECK(d->m_stdOut.keepRawData);
return d->m_codec->toUnicode(d->m_stdOut.rawData);
return d->m_stdOutCodec->toUnicode(d->m_stdOut.rawData);
}
QString Process::stdErr() const
{
QTC_CHECK(d->m_stdErr.keepRawData);
return d->m_codec->toUnicode(d->m_stdErr.rawData);
return d->m_stdErrCodec->toUnicode(d->m_stdErr.rawData);
}
QString Process::cleanedStdOut() const
@@ -1850,7 +1852,20 @@ void ChannelBuffer::handleRest()
void Process::setCodec(QTextCodec *c)
{
QTC_ASSERT(c, return);
d->m_codec = c;
d->m_stdOutCodec = c;
d->m_stdErrCodec = c;
}
void Process::setStdOutCodec(QTextCodec *c)
{
QTC_ASSERT(c, return);
d->m_stdOutCodec = c;
}
void Process::setStdErrCodec(QTextCodec *c)
{
QTC_ASSERT(c, return);
d->m_stdErrCodec = c;
}
void Process::setTimeOutMessageBoxEnabled(bool v)