summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qstring.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/tools/qstring.cpp')
-rw-r--r--src/corelib/tools/qstring.cpp35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index 3161c41063..987e5379a8 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -2625,21 +2625,28 @@ QString& QString::replace(QChar ch, const QString &after, Qt::CaseSensitivity cs
*/
QString& QString::replace(QChar before, QChar after, Qt::CaseSensitivity cs)
{
- ushort a = after.unicode();
- ushort b = before.unicode();
if (d->size) {
- detach();
- ushort *i = d->data();
- const ushort *e = i + d->size;
- if (cs == Qt::CaseSensitive) {
- for (; i != e; ++i)
- if (*i == b)
- *i = a;
- } else {
- b = foldCase(b);
- for (; i != e; ++i)
- if (foldCase(*i) == b)
- *i = a;
+ const int idx = indexOf(before, 0, cs);
+ if (idx != -1) {
+ detach();
+ const ushort a = after.unicode();
+ ushort *i = d->data();
+ const ushort *e = i + d->size;
+ i += idx;
+ *i = a;
+ if (cs == Qt::CaseSensitive) {
+ const ushort b = before.unicode();
+ while (++i != e) {
+ if (*i == b)
+ *i = a;
+ }
+ } else {
+ const ushort b = foldCase(before.unicode());
+ while (++i != e) {
+ if (foldCase(*i) == b)
+ *i = a;
+ }
+ }
}
}
return *this;