From ac103de62b34a275efce81aa93c2767ece512fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Mon, 16 Oct 2023 17:05:58 +0200 Subject: [PATCH] QLocal8Bit::convertFromUnicode[win] move cast earlier So we don't have to do this multiple times when calling the function. Pick-to: 6.5 Task-number: QTBUG-118185 Task-number: QTBUG-105105 Change-Id: Ifa72eedd5f71365618ec6b67fa3047f90f4eb541 Reviewed-by: Thiago Macieira (cherry picked from commit ab009f2f03a5d288fb4ee25722337ca5618d8137) --- src/corelib/text/qstringconverter.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/corelib/text/qstringconverter.cpp b/src/corelib/text/qstringconverter.cpp index ea7c6c4d15e..ca95c6cab43 100644 --- a/src/corelib/text/qstringconverter.cpp +++ b/src/corelib/text/qstringconverter.cpp @@ -1382,7 +1382,7 @@ QByteArray QLocal8Bit::convertFromUnicode_sys(QStringView in, QStringConverter:: QByteArray QLocal8Bit::convertFromUnicode_sys(QStringView in, quint32 codePage, QStringConverter::State *state) { - const QChar *ch = in.data(); + const wchar_t *ch = reinterpret_cast(in.data()); qsizetype uclen = in.size(); Q_ASSERT(uclen < INT_MAX); // ### FIXME @@ -1398,22 +1398,19 @@ QByteArray QLocal8Bit::convertFromUnicode_sys(QStringView in, quint32 codePage, BOOL used_def; QByteArray mb(4096, 0); int len; - while (!(len=WideCharToMultiByte(codePage, 0, (const wchar_t*)ch, uclen, - mb.data(), mb.size()-1, 0, &used_def))) - { + while (!(len = WideCharToMultiByte(codePage, 0, ch, uclen, mb.data(), mb.size() - 1, 0, + &used_def))) { int r = GetLastError(); if (r == ERROR_INSUFFICIENT_BUFFER) { - mb.resize(1+WideCharToMultiByte(codePage, 0, - (const wchar_t*)ch, uclen, - 0, 0, 0, &used_def)); + mb.resize(1+WideCharToMultiByte(codePage, 0, ch, uclen, 0, 0, 0, &used_def)); // and try again... } else { // Fail. Probably can't happen in fact (dwFlags is 0). #ifndef QT_NO_DEBUG // Can't use qWarning(), as it'll recurse to handle %ls - fprintf(stderr, - "WideCharToMultiByte: Cannot convert multibyte text (error %d): %ls\n", - r, reinterpret_cast(QString(ch, uclen).utf16())); + fprintf(stderr, "WideCharToMultiByte: Cannot convert multibyte text (error %d): %ls\n", + r, + reinterpret_cast(QStringView(ch, uclen).toString().utf16())); #endif break; }