diff options
author | hjk <qthjk@ovi.com> | 2012-08-24 10:25:32 +0200 |
---|---|---|
committer | hjk <qthjk@ovi.com> | 2012-08-24 13:38:23 +0200 |
commit | a120210cdfaca610fb2cf5e967f9a2d6ba306ac1 (patch) | |
tree | c838aa490e3d95acdb1b80d854685ece3b0f348e | |
parent | 88f5949e38886e92ea696e0bccd57ccf5a2f8a97 (diff) | |
download | qt-creator-a120210cdfaca610fb2cf5e967f9a2d6ba306ac1.tar.gz |
debugger: simplify escapeCString
There was no real need for the QString based version after all.
Change-Id: I3ea64ba03164c97205fe5ee545fb53ebf44c7535
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
-rw-r--r-- | src/plugins/debugger/gdb/gdbengine.cpp | 6 | ||||
-rw-r--r-- | src/plugins/debugger/gdb/gdbmi.cpp | 67 | ||||
-rw-r--r-- | src/plugins/debugger/gdb/gdbmi.h | 1 |
3 files changed, 20 insertions, 54 deletions
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index d2e4e458fe..161d48c424 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -2542,7 +2542,7 @@ QByteArray GdbEngine::breakpointLocation(BreakpointModelId id) ? data.fileName : breakLocation(data.fileName); // The argument is simply a C-quoted version of the argument to the // non-MI "break" command, including the "original" quoting it wants. - return "\"\\\"" + GdbMi::escapeCString(fileName).toLocal8Bit() + "\\\":" + return "\"\\\"" + GdbMi::escapeCString(fileName.toLocal8Bit()) + "\\\":" + QByteArray::number(data.lineNumber) + '"'; } @@ -2552,7 +2552,7 @@ QByteArray GdbEngine::breakpointLocation2(BreakpointModelId id) const BreakpointParameters &data = handler->breakpointData(id); const QString fileName = data.pathUsage == BreakpointUseFullPath ? data.fileName : breakLocation(data.fileName); - return GdbMi::escapeCString(fileName).toLocal8Bit() + ':' + return GdbMi::escapeCString(fileName.toLocal8Bit()) + ':' + QByteArray::number(data.lineNumber); } @@ -2685,7 +2685,7 @@ void GdbEngine::handleBreakInsert1(const GdbResponse &response) const QString fileName = handler->fileName(id); const int lineNumber = handler->lineNumber(id); QByteArray cmd = "trace " - "\"" + GdbMi::escapeCString(fileName).toLocal8Bit() + "\":" + "\"" + GdbMi::escapeCString(fileName.toLocal8Bit()) + "\":" + QByteArray::number(lineNumber); QVariant vid = QVariant::fromValue(id); postCommand(cmd, NeedsStop | RebuildBreakpointModel, diff --git a/src/plugins/debugger/gdb/gdbmi.cpp b/src/plugins/debugger/gdb/gdbmi.cpp index 42e06e5bff..a6c2462986 100644 --- a/src/plugins/debugger/gdb/gdbmi.cpp +++ b/src/plugins/debugger/gdb/gdbmi.cpp @@ -246,69 +246,36 @@ void GdbMi::dumpChildren(QByteArray * str, bool multiline, int indent) const } } -template <class String, typename CharType> -struct EscapeTraits -{ - static CharType at(const String &s, int i) - { return s.at(i); } - static void appendChar(CharType c, String *s) - { s->append(c); } - static void appendString(const char *c, String *s) - { s->append(c); } -}; - -template <> -struct EscapeTraits<QString, ushort> -{ - static ushort at(const QString &s, int i) - { return s.at(i).unicode(); } - static void appendChar(ushort c, QString *s) - { s->append(QLatin1Char(c)); } - static void appendString(const char *c, QString *s) - { s->append(QLatin1String(c)); } -}; - -template<class ST, typename CT> -inline ST escapeCStringTpl(const ST &ba) +QByteArray GdbMi::escapeCString(const QByteArray &ba) { - ST ret; + QByteArray ret; ret.reserve(ba.length() * 2); for (int i = 0; i < ba.length(); ++i) { - const CT c = EscapeTraits<ST, CT>::at(ba, i); + const uchar c = ba.at(i); switch (c) { - case '\\': EscapeTraits<ST, CT>::appendString("\\\\", &ret); break; - case '\a': EscapeTraits<ST, CT>::appendString("\\a", &ret); break; - case '\b': EscapeTraits<ST, CT>::appendString("\\b", &ret); break; - case '\f': EscapeTraits<ST, CT>::appendString("\\f", &ret); break; - case '\n': EscapeTraits<ST, CT>::appendString("\\n", &ret); break; - case '\r': EscapeTraits<ST, CT>::appendString("\\r", &ret); break; - case '\t': EscapeTraits<ST, CT>::appendString("\\t", &ret); break; - case '\v': EscapeTraits<ST, CT>::appendString("\\v", &ret); break; - case '"': EscapeTraits<ST, CT>::appendString("\\\"", &ret); break; + case '\\': ret += "\\\\"; break; + case '\a': ret += "\\a"; break; + case '\b': ret += "\\b"; break; + case '\f': ret += "\\f"; break; + case '\n': ret += "\\n"; break; + case '\r': ret += "\\r"; break; + case '\t': ret += "\\t"; break; + case '\v': ret += "\\v"; break; + case '"': ret += "\\\""; break; default: if (c < 32 || c == 127) { - EscapeTraits<ST, CT>::appendChar('\\', &ret); - EscapeTraits<ST, CT>::appendChar('0' + (c >> 6), &ret); - EscapeTraits<ST, CT>::appendChar('0' + ((c >> 3) & 7), &ret); - EscapeTraits<ST, CT>::appendChar('0' + (c & 7), &ret); + ret += '\\'; + ret += ('0' + (c >> 6)); + ret += ('0' + ((c >> 3) & 7)); + ret += ('0' + (c & 7)); } else { - EscapeTraits<ST, CT>::appendChar(c, &ret); + ret += c; } } } return ret; } -QString GdbMi::escapeCString(const QString &ba) -{ - return escapeCStringTpl<QString, ushort>(ba); -} - -QByteArray GdbMi::escapeCString(const QByteArray &ba) -{ - return escapeCStringTpl<QByteArray, uchar>(ba); -} - QByteArray GdbMi::toString(bool multiline, int indent) const { QByteArray result; diff --git a/src/plugins/debugger/gdb/gdbmi.h b/src/plugins/debugger/gdb/gdbmi.h index fe36eafb75..26df7fb1c9 100644 --- a/src/plugins/debugger/gdb/gdbmi.h +++ b/src/plugins/debugger/gdb/gdbmi.h @@ -135,7 +135,6 @@ private: static QByteArray parseCString(const char *&from, const char *to); static QByteArray escapeCString(const QByteArray &ba); - static QString escapeCString(const QString &ba); void parseResultOrValue(const char *&from, const char *to); void parseValue(const char *&from, const char *to); void parseTuple(const char *&from, const char *to); |