diff options
author | Øystein Heskestad <[email protected]> | 2022-01-05 13:10:17 +0100 |
---|---|---|
committer | Øystein Heskestad <[email protected]> | 2022-01-07 14:31:38 +0100 |
commit | 18671b0491e4806fdff95aac6c16a067890ef030 (patch) | |
tree | 41fad02e0756f430993aadf377189c14b5f62889 | |
parent | a5b158ed6dd5e393eab78f4034a93ac1250850e3 (diff) |
Replace QString::utf16() with data() in memcpy() and QByteArray ctor
QString::utf16() needlessly detaches fromRawData() to ensure a
terminating NUL. Use data() where we don't require said NUL, taking
care not to call the mutable data() overload, which would detach,
too.
Task-number: QTBUG-98763
Change-Id: I7075a8f18ab1f82ebbcf8cfab1643e8ab7f38d51
Reviewed-by: Marc Mutz <[email protected]>
-rw-r--r-- | src/corelib/io/qprocess_win.cpp | 4 | ||||
-rw-r--r-- | src/corelib/io/qsettings_win.cpp | 4 | ||||
-rw-r--r-- | src/gui/text/windows/qwindowsfontdatabase.cpp | 6 | ||||
-rw-r--r-- | src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp | 2 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsmime.cpp | 6 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbmime.cpp | 2 | ||||
-rw-r--r-- | src/plugins/sqldrivers/db2/qsql_db2.cpp | 4 |
7 files changed, 14 insertions, 14 deletions
diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp index d316af7c386..aaaccf4e0db 100644 --- a/src/corelib/io/qprocess_win.cpp +++ b/src/corelib/io/qprocess_win.cpp @@ -471,14 +471,14 @@ static QByteArray qt_create_environment(const QProcessEnvironmentPrivate::Map &e envlist.resize(envlist.size() + tmpSize); tmpSize = it.key().length() * sizeof(wchar_t); - memcpy(envlist.data() + pos, it.key().utf16(), tmpSize); + memcpy(envlist.data() + pos, it.key().data(), tmpSize); pos += tmpSize; memcpy(envlist.data() + pos, &equal, sizeof(wchar_t)); pos += sizeof(wchar_t); tmpSize = it.value().length() * sizeof(wchar_t); - memcpy(envlist.data() + pos, it.value().utf16(), tmpSize); + memcpy(envlist.data() + pos, it.value().data(), tmpSize); pos += tmpSize; memcpy(envlist.data() + pos, &nul, sizeof(wchar_t)); diff --git a/src/corelib/io/qsettings_win.cpp b/src/corelib/io/qsettings_win.cpp index 00a333098d1..5146009c715 100644 --- a/src/corelib/io/qsettings_win.cpp +++ b/src/corelib/io/qsettings_win.cpp @@ -672,8 +672,8 @@ void QWinSettingsPrivate::set(const QString &uKey, const QVariant &value) } if (type == REG_BINARY) { - QString s = variantToString(value); - regValueBuff = QByteArray(reinterpret_cast<const char*>(s.utf16()), s.length() * 2); + const QString s = variantToString(value); + regValueBuff = QByteArray(reinterpret_cast<const char *>(s.data()), s.length() * 2); } else { QStringList::const_iterator it = l.constBegin(); for (; it != l.constEnd(); ++it) { diff --git a/src/gui/text/windows/qwindowsfontdatabase.cpp b/src/gui/text/windows/qwindowsfontdatabase.cpp index f11c0920a77..7e3c33921b4 100644 --- a/src/gui/text/windows/qwindowsfontdatabase.cpp +++ b/src/gui/text/windows/qwindowsfontdatabase.cpp @@ -480,7 +480,7 @@ static QChar *createFontFile(const QString &faceName) if (!faceName.isEmpty()) { const int nameLength = qMin(faceName.length(), LF_FACESIZE - 1); faceNamePtr = new QChar[nameLength + 1]; - memcpy(static_cast<void *>(faceNamePtr), faceName.utf16(), sizeof(wchar_t) * nameLength); + memcpy(static_cast<void *>(faceNamePtr), faceName.data(), sizeof(wchar_t) * nameLength); faceNamePtr[nameLength] = u'\0'; } return faceNamePtr; @@ -990,7 +990,7 @@ QStringList QWindowsFontDatabase::addApplicationFont(const QByteArray &fontData, HDC hdc = GetDC(0); LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); - memcpy(lf.lfFaceName, familyName.utf16(), sizeof(wchar_t) * qMin(LF_FACESIZE - 1, familyName.size())); + memcpy(lf.lfFaceName, familyName.data(), sizeof(wchar_t) * qMin(LF_FACESIZE - 1, familyName.size())); lf.lfCharSet = DEFAULT_CHARSET; const QFontValues &values = fontValues.at(j); lf.lfWeight = values.weight; @@ -1164,7 +1164,7 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request, const Q const QString nameSubstitute = QWindowsFontEngineDirectWrite::fontNameSubstitute(fam); if (nameSubstitute != fam) { const int nameSubstituteLength = qMin(nameSubstitute.length(), LF_FACESIZE - 1); - memcpy(lf.lfFaceName, nameSubstitute.utf16(), nameSubstituteLength * sizeof(wchar_t)); + memcpy(lf.lfFaceName, nameSubstitute.data(), nameSubstituteLength * sizeof(wchar_t)); lf.lfFaceName[nameSubstituteLength] = 0; } diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp index 9ff107e7dfe..052ddee5e41 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp @@ -1039,7 +1039,7 @@ public: const QString nameSubstitute = QSettings(QLatin1String(keyC), QSettings::NativeFormat).value(familyName, familyName).toString(); if (nameSubstitute != familyName) { const int nameSubstituteLength = qMin(nameSubstitute.length(), LF_FACESIZE - 1); - memcpy(lf.lfFaceName, nameSubstitute.utf16(), size_t(nameSubstituteLength) * sizeof(wchar_t)); + memcpy(lf.lfFaceName, nameSubstitute.data(), size_t(nameSubstituteLength) * sizeof(wchar_t)); lf.lfFaceName[nameSubstituteLength] = 0; } diff --git a/src/plugins/platforms/windows/qwindowsmime.cpp b/src/plugins/platforms/windows/qwindowsmime.cpp index 3321845411f..9c669c8fbcc 100644 --- a/src/plugins/platforms/windows/qwindowsmime.cpp +++ b/src/plugins/platforms/windows/qwindowsmime.cpp @@ -670,7 +670,7 @@ bool QWindowsMimeURI::convertFromMime(const FORMATETC &formatetc, const QMimeDat auto *f = reinterpret_cast<wchar_t *>(files); for (int i=0; i<fileNames.size(); i++) { const auto l = size_t(fileNames.at(i).length()); - memcpy(f, fileNames.at(i).utf16(), l * sizeof(ushort)); + memcpy(f, fileNames.at(i).data(), l * sizeof(ushort)); f += l; *f++ = 0; } @@ -682,8 +682,8 @@ bool QWindowsMimeURI::convertFromMime(const FORMATETC &formatetc, const QMimeDat const auto urls = mimeData->urls(); QByteArray result; if (!urls.isEmpty()) { - QString url = urls.at(0).toString(); - result = QByteArray(reinterpret_cast<const char *>(url.utf16()), + const QString url = urls.at(0).toString(); + result = QByteArray(reinterpret_cast<const char *>(url.data()), url.length() * int(sizeof(ushort))); } result.append('\0'); diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp index 738d0e3b91d..62149e7f6ba 100644 --- a/src/plugins/platforms/xcb/qxcbmime.cpp +++ b/src/plugins/platforms/xcb/qxcbmime.cpp @@ -113,7 +113,7 @@ bool QXcbMime::mimeDataForAtom(QXcbConnection *connection, xcb_atom_t a, QMimeDa if (atomName == QLatin1String("text/uri-list") && connection->atomName(a) == "text/x-moz-url") { const QString mozUri = QLatin1String(data->split('\n').constFirst()) + QLatin1Char('\n'); - *data = QByteArray(reinterpret_cast<const char *>(mozUri.utf16()), + *data = QByteArray(reinterpret_cast<const char *>(mozUri.data()), mozUri.length() * 2); } else if (atomName == QLatin1String("application/x-color")) *dataFormat = 16; diff --git a/src/plugins/sqldrivers/db2/qsql_db2.cpp b/src/plugins/sqldrivers/db2/qsql_db2.cpp index e819d0ea868..e605ac91a20 100644 --- a/src/plugins/sqldrivers/db2/qsql_db2.cpp +++ b/src/plugins/sqldrivers/db2/qsql_db2.cpp @@ -808,11 +808,11 @@ bool QDB2Result::exec() break; } case QMetaType::QString: { - QString str(values.at(i).toString()); + const QString str(values.at(i).toString()); if (*ind != SQL_NULL_DATA) *ind = str.length() * sizeof(QChar); if (bindValueType(i) & QSql::Out) { - QByteArray ba((char*)str.utf16(), str.capacity() * sizeof(QChar)); + QByteArray ba((char *)str.data(), str.capacity() * sizeof(QChar)); r = SQLBindParameter(d->hStmt, i + 1, qParamType[bindValueType(i) & 3], |