From 62e7ec7b801738ad5198f90dc7163e53056d0e50 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Thu, 7 Apr 2016 19:09:52 +0300 Subject: QDateTime: don't allocate memory in fromOffsetString() Manual splitting instead of QStringRef::split() Change-Id: I27ccf1c4e44ead5b13f85f2cdbd990cb3b874a7a Reviewed-by: Edward Welbourne Reviewed-by: Marc Mutz --- src/corelib/tools/qdatetime.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src/corelib/tools/qdatetime.cpp') diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index 462c289ab0..7cc86eb3f1 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -257,7 +257,7 @@ static QString toOffsetString(Qt::DateFormat format, int offset) } // Parse offset in [+-]HH[[:]mm] format -static int fromOffsetString(const QStringRef &offsetString, bool *valid) +static int fromOffsetString(const QStringRef &offsetString, bool *valid) Q_DECL_NOTHROW { *valid = false; @@ -278,19 +278,22 @@ static int fromOffsetString(const QStringRef &offsetString, bool *valid) return 0; // Split the hour and minute parts - QVector parts = offsetString.mid(1).split(QLatin1Char(':')); - if (parts.count() == 1) { - // [+-]HHmm or [+-]HH format - parts.append(parts.first().mid(2)); - parts[0] = parts.first().left(2); - } + const QStringRef time = offsetString.mid(1); + int hhLen = time.indexOf(QLatin1Char(':')); + int mmIndex; + if (hhLen == -1) + mmIndex = hhLen = 2; // [+-]HHmm or [+-]HH format + else + mmIndex = hhLen + 1; + const QStringRef hhRef = time.left(hhLen); bool ok = false; - const int hour = parts.first().toInt(&ok); + const int hour = hhRef.toInt(&ok); if (!ok) return 0; - const int minute = (parts.at(1).isEmpty()) ? 0 : parts.at(1).toInt(&ok); + const QStringRef mmRef = time.mid(mmIndex); + const int minute = mmRef.isEmpty() ? 0 : mmRef.toInt(&ok); if (!ok || minute < 0 || minute > 59) return 0; -- cgit v1.2.3