From 74955f386d859ffe573487b73e17e81754bd6e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98ystein=20Heskestad?= Date: Fri, 7 Jan 2022 09:57:34 +0100 Subject: [PATCH] Replace QString::utf16 with QString::data where appropriate QString::utf16() needlessly detaches fromRawData() to ensure a terminating NUL. Use data() where we don't require said NUL, taking care not call the mutable data() overload, which would detach, too. Task-number: QTBUG-98763 Change-Id: Ibd5e56798c0c666893c12c91ff0881842b8430c7 Reviewed-by: Marc Mutz --- src/corelib/io/qdir.cpp | 2 +- src/corelib/io/qurl.cpp | 2 +- src/corelib/serialization/qjsonparser.cpp | 2 +- src/network/kernel/qauthenticator.cpp | 6 +++--- src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index bae47bfb2b9..fbde6b69fd7 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -2172,7 +2172,7 @@ QString qt_normalizePathSegments(const QString &name, QDirPrivate::PathNormaliza QVarLengthArray outVector(len); int used = len; char16_t *out = outVector.data(); - const ushort *p = name.utf16(); + const ushort *p = reinterpret_cast(name.data()); const ushort *prefix = p; int up = 0; diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 1e74b2ad9fa..bae31c1b6c5 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -992,7 +992,7 @@ inline bool QUrlPrivate::setScheme(const QString &value, int len, bool doSetErro // validate it: int needsLowercasing = -1; - const ushort *p = value.utf16(); + const ushort *p = reinterpret_cast(value.data()); for (int i = 0; i < len; ++i) { if (p[i] >= 'a' && p[i] <= 'z') continue; diff --git a/src/corelib/serialization/qjsonparser.cpp b/src/corelib/serialization/qjsonparser.cpp index 2514319e0e9..168a2f6f7b7 100644 --- a/src/corelib/serialization/qjsonparser.cpp +++ b/src/corelib/serialization/qjsonparser.cpp @@ -910,7 +910,7 @@ bool Parser::parseString() return false; } - container->appendByteData(reinterpret_cast(ucs4.utf16()), ucs4.size() * 2, + container->appendByteData(reinterpret_cast(ucs4.constData()), ucs4.size() * 2, QCborValue::String, QtCbor::Element::StringIsUtf16); END; return true; diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index 32402408829..e82f9d459de 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -1599,11 +1599,11 @@ static QByteArray qSspiStartup(QAuthenticatorPrivate *ctx, QAuthenticatorPrivate auth.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE; bool useAuth = false; if (method == QAuthenticatorPrivate::Negotiate && !ctx->user.isEmpty()) { - auth.Domain = const_cast(ctx->userDomain.utf16()); + auth.Domain = const_cast(reinterpret_cast(ctx->userDomain.constData())); auth.DomainLength = ctx->userDomain.size(); - auth.User = const_cast(ctx->user.utf16()); + auth.User = const_cast(reinterpret_cast(ctx->user.constData())); auth.UserLength = ctx->user.size(); - auth.Password = const_cast(ctx->password.utf16()); + auth.Password = const_cast(reinterpret_cast(ctx->password.constData())); auth.PasswordLength = ctx->password.size(); useAuth = true; } diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp index 9f90d91e829..54d734683b7 100644 --- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp +++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp @@ -524,7 +524,7 @@ bool QSQLiteResult::exec() case QMetaType::QDateTime: { const QDateTime dateTime = value.toDateTime(); const QString str = dateTime.toString(Qt::ISODateWithMs); - res = sqlite3_bind_text16(d->stmt, i + 1, str.utf16(), + res = sqlite3_bind_text16(d->stmt, i + 1, str.data(), int(str.size() * sizeof(ushort)), SQLITE_TRANSIENT); break; @@ -532,7 +532,7 @@ bool QSQLiteResult::exec() case QMetaType::QTime: { const QTime time = value.toTime(); const QString str = time.toString(u"hh:mm:ss.zzz"); - res = sqlite3_bind_text16(d->stmt, i + 1, str.utf16(), + res = sqlite3_bind_text16(d->stmt, i + 1, str.data(), int(str.size() * sizeof(ushort)), SQLITE_TRANSIENT); break; @@ -545,9 +545,9 @@ bool QSQLiteResult::exec() SQLITE_STATIC); break; } default: { - QString str = value.toString(); + const QString str = value.toString(); // SQLITE_TRANSIENT makes sure that sqlite buffers the data - res = sqlite3_bind_text16(d->stmt, i + 1, str.utf16(), + res = sqlite3_bind_text16(d->stmt, i + 1, str.data(), int(str.size()) * sizeof(QChar), SQLITE_TRANSIENT); break; }