summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/debuggerprotocol.cpp
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2022-11-08 16:57:14 +0100
committerhjk <hjk@qt.io>2022-11-09 10:54:30 +0000
commit19ef8e5c7a5348e4b47feed09cefcc2b4651be32 (patch)
treeee55cee839ee439fc4a2b44c051194065615c739 /src/plugins/debugger/debuggerprotocol.cpp
parent06838e3e5e41f1f090fdd016c736bb91241cd5b3 (diff)
downloadqt-creator-19ef8e5c7a5348e4b47feed09cefcc2b4651be32.tar.gz
Debugger: Avoid some temporary containers when parsing escaped chars
Change-Id: Ia9af6801de6f745388e464fc806297d396c66160 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/debugger/debuggerprotocol.cpp')
-rw-r--r--src/plugins/debugger/debuggerprotocol.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp
index 0bf60c3a4f..9aebe53f34 100644
--- a/src/plugins/debugger/debuggerprotocol.cpp
+++ b/src/plugins/debugger/debuggerprotocol.cpp
@@ -112,7 +112,7 @@ void GdbMi::parseResultOrValue(DebuggerOutputParser &parser)
}
// Reads one \ooo entity.
-static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer)
+static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QString &buffer)
{
if (parser.remainingChars() < 4)
return false;
@@ -130,7 +130,7 @@ static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QByteArray &bu
return true;
}
-static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer)
+static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QString &buffer)
{
if (parser.remainingChars() < 4)
return false;
@@ -178,15 +178,16 @@ static void parseSimpleEscape(DebuggerOutputParser &parser, QString &result)
// *or* one escaped char, *or* one unescaped char.
static void parseCharOrEscape(DebuggerOutputParser &parser, QString &result)
{
- QByteArray buffer;
- while (parseOctalEscapedHelper(parser, buffer))
+ const int oldSize = result.size();
+ while (parseOctalEscapedHelper(parser, result))
;
- while (parseHexEscapedHelper(parser, buffer))
+ while (parseHexEscapedHelper(parser, result))
;
- if (!buffer.isEmpty()) {
- result.append(QString::fromUtf8(buffer));
- } else if (parser.isCurrent('\\')) {
+ if (result.size() != oldSize)
+ return;
+
+ if (parser.isCurrent('\\')) {
parser.advance();
parseSimpleEscape(parser, result);
} else {