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 <marc.mutz@qt.io>
This commit is contained in:
Øystein Heskestad 2022-01-07 09:57:34 +01:00
parent 88dda89329
commit 74955f386d
5 changed files with 10 additions and 10 deletions

View File

@ -2172,7 +2172,7 @@ QString qt_normalizePathSegments(const QString &name, QDirPrivate::PathNormaliza
QVarLengthArray<char16_t> outVector(len);
int used = len;
char16_t *out = outVector.data();
const ushort *p = name.utf16();
const ushort *p = reinterpret_cast<const ushort *>(name.data());
const ushort *prefix = p;
int up = 0;

View File

@ -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<const ushort *>(value.data());
for (int i = 0; i < len; ++i) {
if (p[i] >= 'a' && p[i] <= 'z')
continue;

View File

@ -910,7 +910,7 @@ bool Parser::parseString()
return false;
}
container->appendByteData(reinterpret_cast<const char *>(ucs4.utf16()), ucs4.size() * 2,
container->appendByteData(reinterpret_cast<const char *>(ucs4.constData()), ucs4.size() * 2,
QCborValue::String, QtCbor::Element::StringIsUtf16);
END;
return true;

View File

@ -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<ushort *>(ctx->userDomain.utf16());
auth.Domain = const_cast<ushort *>(reinterpret_cast<const ushort *>(ctx->userDomain.constData()));
auth.DomainLength = ctx->userDomain.size();
auth.User = const_cast<ushort *>(ctx->user.utf16());
auth.User = const_cast<ushort *>(reinterpret_cast<const ushort *>(ctx->user.constData()));
auth.UserLength = ctx->user.size();
auth.Password = const_cast<ushort *>(ctx->password.utf16());
auth.Password = const_cast<ushort *>(reinterpret_cast<const ushort *>(ctx->password.constData()));
auth.PasswordLength = ctx->password.size();
useAuth = true;
}

View File

@ -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; }