From 5fd1e3c454f6f65eb0b366051551977213dff699 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Mon, 4 Jan 2010 14:11:07 +0100
Subject: [PATCH] properly decode messages from gdb

... using fromLocal8Bit instead of fromLatin1.
of course the localized messages pose a "challenge" for the various
workarounds which parse them ...

Task-number: QTCREATORBUG-504
---
 src/plugins/debugger/gdb/attachgdbadapter.cpp |  2 +-
 src/plugins/debugger/gdb/coregdbadapter.cpp   |  4 ++--
 src/plugins/debugger/gdb/gdbengine.cpp        | 12 +++++++-----
 src/plugins/debugger/gdb/plaingdbadapter.cpp  |  4 ++--
 src/plugins/debugger/gdb/remotegdbadapter.cpp |  5 +++--
 src/plugins/debugger/gdb/termgdbadapter.cpp   |  2 +-
 src/plugins/debugger/gdb/trkgdbadapter.cpp    |  2 +-
 7 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/src/plugins/debugger/gdb/attachgdbadapter.cpp b/src/plugins/debugger/gdb/attachgdbadapter.cpp
index 0f6b50b6bd7..2810ef23d97 100644
--- a/src/plugins/debugger/gdb/attachgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/attachgdbadapter.cpp
@@ -85,7 +85,7 @@ void AttachGdbAdapter::handleAttach(const GdbResponse &response)
         emit inferiorPrepared();
         m_engine->updateAll();
     } else {
-        QString msg = __(response.data.findChild("msg").data());
+        QString msg = QString::fromLocal8Bit(response.data.findChild("msg").data());
         emit inferiorStartFailed(msg);
     }
 }
diff --git a/src/plugins/debugger/gdb/coregdbadapter.cpp b/src/plugins/debugger/gdb/coregdbadapter.cpp
index ee0304208be..e64abf9af31 100644
--- a/src/plugins/debugger/gdb/coregdbadapter.cpp
+++ b/src/plugins/debugger/gdb/coregdbadapter.cpp
@@ -108,7 +108,7 @@ void CoreGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response)
         showStatusMessage(tr("Symbols found."));
     } else {
         QString msg = tr("Loading symbols from \"%1\" failed:\n").arg(m_executable)
-            + __(response.data.findChild("msg").data());
+            + QString::fromLocal8Bit(response.data.findChild("msg").data());
         showMessageBox(QMessageBox::Warning, tr("Error Loading Symbols"), msg);
     }
     loadCoreFile();
@@ -160,7 +160,7 @@ void CoreGdbAdapter::handleTargetCore(const GdbResponse &response)
         m_engine->updateAll();
     } else {
         QString msg = tr("Attach to core \"%1\" failed:\n").arg(startParameters().coreFile)
-            + __(response.data.findChild("msg").data());
+            + QString::fromLocal8Bit(response.data.findChild("msg").data());
         emit inferiorStartFailed(msg);
     }
 }
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index bd5d6c5ee71..9a1e9da89ea 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -1518,7 +1518,8 @@ void GdbEngine::handleInferiorShutdown(const GdbResponse &response)
     } else {
         debugMessage(_("INFERIOR SHUTDOWN FAILED"));
         setState(InferiorShutdownFailed);
-        QString msg = m_gdbAdapter->msgInferiorStopFailed(_(response.data.findChild("msg").data()));
+        QString msg = m_gdbAdapter->msgInferiorStopFailed(
+            QString::fromLocal8Bit(response.data.findChild("msg").data()));
         showMessageBox(QMessageBox::Critical, tr("Inferior shutdown failed"), msg);
     }
     shutdown(); // re-iterate...
@@ -1531,7 +1532,8 @@ void GdbEngine::handleGdbExit(const GdbResponse &response)
         m_commandsDoneCallback = 0;
         // don't set state here, this will be handled in handleGdbFinished()
     } else {
-        QString msg = m_gdbAdapter->msgGdbStopFailed(_(response.data.findChild("msg").data()));
+        QString msg = m_gdbAdapter->msgGdbStopFailed(
+            QString::fromLocal8Bit(response.data.findChild("msg").data()));
         debugMessage(_("GDB WON'T EXIT (%1); KILLING IT").arg(msg));
         m_gdbProc.kill();
     }
@@ -4229,7 +4231,7 @@ void GdbEngine::handleFetchDisassemblerByLine(const GdbResponse &response)
         if (msg == "mi_cmd_disassemble: Invalid line number")
             fetchDisassemblerByAddress(ac.agent, true);
         else
-            showStatusMessage(tr("Disassembler failed: %1").arg(_(msg)), 5000);
+            showStatusMessage(tr("Disassembler failed: %1").arg(QString::fromLocal8Bit(msg)), 5000);
     }
 }
 
@@ -4254,7 +4256,7 @@ void GdbEngine::handleFetchDisassemblerByAddress1(const GdbResponse &response)
     } else {
         // 26^error,msg="Cannot access memory at address 0x801ca308"
         QByteArray msg = response.data.findChild("msg").data();
-        showStatusMessage(tr("Disassembler failed: %1").arg(_(msg)), 5000);
+        showStatusMessage(tr("Disassembler failed: %1").arg(QString::fromLocal8Bit(msg)), 5000);
     }
 }
 
@@ -4268,7 +4270,7 @@ void GdbEngine::handleFetchDisassemblerByAddress0(const GdbResponse &response)
         ac.agent->setContents(parseDisassembler(lines));
     } else {
         QByteArray msg = response.data.findChild("msg").data();
-        showStatusMessage(tr("Disassembler failed: %1").arg(_(msg)), 5000);
+        showStatusMessage(tr("Disassembler failed: %1").arg(QString::fromLocal8Bit(msg)), 5000);
     }
 }
 
diff --git a/src/plugins/debugger/gdb/plaingdbadapter.cpp b/src/plugins/debugger/gdb/plaingdbadapter.cpp
index c0e0908666d..a4c0d34d86b 100644
--- a/src/plugins/debugger/gdb/plaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/plaingdbadapter.cpp
@@ -121,7 +121,7 @@ void PlainGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response)
         emit inferiorPrepared();
     } else {
         QString msg = tr("Starting executable failed:\n") +
-            __(response.data.findChild("msg").data());
+            QString::fromLocal8Bit(response.data.findChild("msg").data());
         emit inferiorStartFailed(msg);
     }
 }
@@ -163,7 +163,7 @@ void PlainGdbAdapter::handleExecRun(const GdbResponse &response)
         showStatusMessage(msgInferiorStarted());
     } else {
         QTC_ASSERT(state() == InferiorRunningRequested, qDebug() << state());
-        const QByteArray &msg = response.data.findChild("msg").data();
+        const QString &msg = QString::fromLocal8Bit(response.data.findChild("msg").data());
         //QTC_ASSERT(status() == InferiorRunning, /**/);
         //interruptInferior();
         emit inferiorStartFailed(msg);
diff --git a/src/plugins/debugger/gdb/remotegdbadapter.cpp b/src/plugins/debugger/gdb/remotegdbadapter.cpp
index 4550359956a..b144c146209 100644
--- a/src/plugins/debugger/gdb/remotegdbadapter.cpp
+++ b/src/plugins/debugger/gdb/remotegdbadapter.cpp
@@ -203,7 +203,7 @@ void RemoteGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response)
             CB(handleTargetRemote));
     } else {
         QString msg = tr("Starting remote executable failed:\n");
-        msg += __(response.data.findChild("msg").data());
+        msg += QString::fromLocal8Bit(response.data.findChild("msg").data());
         emit inferiorStartFailed(msg);
     }
 }
@@ -219,7 +219,8 @@ void RemoteGdbAdapter::handleTargetRemote(const GdbResponse &record)
         emit inferiorPrepared();
     } else {
         // 16^error,msg="hd:5555: Connection timed out."
-        QString msg = msgConnectRemoteServerFailed(__(record.data.findChild("msg").data()));
+        QString msg = msgConnectRemoteServerFailed(
+            QString::fromLocal8Bit(record.data.findChild("msg").data()));
         emit inferiorStartFailed(msg);
     }
 }
diff --git a/src/plugins/debugger/gdb/termgdbadapter.cpp b/src/plugins/debugger/gdb/termgdbadapter.cpp
index 613aaa79f30..53378a42053 100644
--- a/src/plugins/debugger/gdb/termgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/termgdbadapter.cpp
@@ -143,7 +143,7 @@ void TermGdbAdapter::handleStubAttached(const GdbResponse &response)
         m_engine->postCommand(_("-stack-list-frames 0 0"), CB(handleEntryPoint));
 #endif
     } else if (response.resultClass == GdbResultError) {
-        QString msg = _(response.data.findChild("msg").data());
+        QString msg = QString::fromLocal8Bit(response.data.findChild("msg").data());
         emit inferiorStartFailed(msg);
     }
 }
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 3eab98ab2e7..5e95384f4e6 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -1628,7 +1628,7 @@ void TrkGdbAdapter::handleTargetRemote(const GdbResponse &record)
         emit inferiorPrepared();
     } else {
         QString msg = tr("Connecting to TRK server adapter failed:\n")
-            + _(record.data.findChild("msg").data());
+            + QString::fromLocal8Bit(record.data.findChild("msg").data());
         emit inferiorStartFailed(msg);
     }
 }
-- 
GitLab