diff options
author | Matt Vogt <matthew.vogt@jollamobile.com> | 2014-12-23 08:08:21 +1000 |
---|---|---|
committer | Matthew Vogt <matthew.vogt@qinetic.com.au> | 2015-01-05 04:56:59 +0100 |
commit | d8a9ba4dee1dad7479106885a74a1368f0be44c8 (patch) | |
tree | 7d464d74d49d4d08d4a991f0911f4f854a0d0cd9 | |
parent | 6aa227bcf2d34acff67cebf656df40e308221da8 (diff) |
Make ID component parameter escaping functions consistent
Use the same coding style when escaping and unescaping characters in
both the URI and the local ID components.
Change-Id: I690c3d840368a7795e7fe092910255960cbacdde
Reviewed-by: Christopher Adams <chris.adams@jollamobile.com>
-rw-r--r-- | src/contacts/qcontactmanager_p.cpp | 22 | ||||
-rw-r--r-- | src/organizer/qorganizermanager_p.cpp | 22 |
2 files changed, 28 insertions, 16 deletions
diff --git a/src/contacts/qcontactmanager_p.cpp b/src/contacts/qcontactmanager_p.cpp index 51ba5b345..99ff27bfd 100644 --- a/src/contacts/qcontactmanager_p.cpp +++ b/src/contacts/qcontactmanager_p.cpp @@ -342,9 +342,9 @@ static inline QString escapeParam(const QString ¶m) { QString ret; const int len = param.length(); - ret.reserve(int(len * 1.1)); - for (int i = 0; i < len; ++i) { - switch (param.at(i).unicode()) { + ret.reserve(len + (len >> 3)); + for (QString::const_iterator it = param.begin(), end = param.end(); it != end; ++it) { + switch (it->unicode()) { case ':': ret += QStringLiteral(":"); break; @@ -355,7 +355,7 @@ static inline QString escapeParam(const QString ¶m) ret += QStringLiteral("&"); break; default: - ret += param.at(i); + ret += *it; break; } } @@ -383,10 +383,16 @@ static inline QByteArray escapeColon(const QByteArray ¶m) static inline QString unescapeParam(const QString ¶m) { QString ret(param); - if (ret.contains(QLatin1Char('&'))) { - ret.replace(QStringLiteral(":"), QStringLiteral(":")); - ret.replace(QStringLiteral("&equ;"), QStringLiteral("=")); - ret.replace(QStringLiteral("&"), QStringLiteral("&")); + int index = 0; + while ((index = ret.indexOf(QLatin1Char('&'), index)) != -1) { + const QString partial(ret.mid(index, 5)); + if (partial == QStringLiteral(":")) + ret.replace(index, 5, QStringLiteral(":")); + else if (partial == QStringLiteral("&equ;")) + ret.replace(index, 5, QStringLiteral("=")); + else if (partial == QStringLiteral("&")) + ret.replace(index, 5, QStringLiteral("&")); + ++index; } return ret; } diff --git a/src/organizer/qorganizermanager_p.cpp b/src/organizer/qorganizermanager_p.cpp index 5fd9af31d..95a04cc13 100644 --- a/src/organizer/qorganizermanager_p.cpp +++ b/src/organizer/qorganizermanager_p.cpp @@ -241,9 +241,9 @@ static inline QString escapeParam(const QString ¶m) { QString ret; const int len = param.length(); - ret.reserve(int(len * 1.1)); - for (int i = 0; i < len; ++i) { - switch (param.at(i).unicode()) { + ret.reserve(len + (len >> 3)); + for (QString::const_iterator it = param.begin(), end = param.end(); it != end; ++it) { + switch (it->unicode()) { case ':': ret += QStringLiteral(":"); break; @@ -254,7 +254,7 @@ static inline QString escapeParam(const QString ¶m) ret += QStringLiteral("&"); break; default: - ret += param.at(i); + ret += *it; break; } } @@ -282,10 +282,16 @@ static inline QByteArray escapeColon(const QByteArray ¶m) static inline QString unescapeParam(const QString ¶m) { QString ret(param); - if (ret.contains(QLatin1Char('&'))) { - ret.replace(QStringLiteral(":"), QStringLiteral(":")); - ret.replace(QStringLiteral("&equ;"), QStringLiteral("=")); - ret.replace(QStringLiteral("&"), QStringLiteral("&")); + int index = 0; + while ((index = ret.indexOf(QLatin1Char('&'), index)) != -1) { + const QString partial(ret.mid(index, 5)); + if (partial == QStringLiteral(":")) + ret.replace(index, 5, QStringLiteral(":")); + else if (partial == QStringLiteral("&equ;")) + ret.replace(index, 5, QStringLiteral("=")); + else if (partial == QStringLiteral("&")) + ret.replace(index, 5, QStringLiteral("&")); + ++index; } return ret; } |