From bf57abc0d5950fdb8d7c03d0b6c2c7eb1730b4ad Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 2 May 2020 19:01:11 +0200 Subject: [PATCH] Fix Windows CMake build errors Lambda expressions with uncaptured constants were leading to errors, and there were also some warnings about deprecated functions (QFontMetrics::width and inet_ntoa). --- Source/Core/DolphinQt/Config/VerifyWidget.cpp | 34 +++++++++---------- .../DolphinQt/Debugger/CodeViewWidget.cpp | 18 +++++++--- .../Core/DolphinQt/Debugger/NetworkWidget.cpp | 23 +++++++++---- Source/Core/VideoCommon/CommandProcessor.cpp | 2 +- 4 files changed, 48 insertions(+), 29 deletions(-) diff --git a/Source/Core/DolphinQt/Config/VerifyWidget.cpp b/Source/Core/DolphinQt/Config/VerifyWidget.cpp index ce221bce8f..e6c320e278 100644 --- a/Source/Core/DolphinQt/Config/VerifyWidget.cpp +++ b/Source/Core/DolphinQt/Config/VerifyWidget.cpp @@ -139,26 +139,26 @@ void VerifyWidget::Verify() progress.GetRaw()->setMinimumDuration(500); progress.GetRaw()->setWindowModality(Qt::WindowModal); - auto future = - std::async(std::launch::async, - [&verifier, &progress]() -> std::optional { - progress.SetValue(0); - verifier.Start(); - while (verifier.GetBytesProcessed() != verifier.GetTotalBytes()) - { - progress.SetValue(static_cast(verifier.GetBytesProcessed() / DIVISOR)); - if (progress.WasCanceled()) - return std::nullopt; + auto future = std::async( + std::launch::async, + [&verifier, &progress, DIVISOR]() -> std::optional { + progress.SetValue(0); + verifier.Start(); + while (verifier.GetBytesProcessed() != verifier.GetTotalBytes()) + { + progress.SetValue(static_cast(verifier.GetBytesProcessed() / DIVISOR)); + if (progress.WasCanceled()) + return std::nullopt; - verifier.Process(); - } - verifier.Finish(); + verifier.Process(); + } + verifier.Finish(); - const DiscIO::VolumeVerifier::Result result = verifier.GetResult(); - progress.Reset(); + const DiscIO::VolumeVerifier::Result result = verifier.GetResult(); + progress.Reset(); - return result; - }); + return result; + }); progress.GetRaw()->exec(); std::optional result = future.get(); diff --git a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp index d2cbbfb0d9..6f55cea96d 100644 --- a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp @@ -194,11 +194,20 @@ void CodeViewWidget::FontBasedSizing() constexpr int extra_text_width = 8; const QFontMetrics fm(Settings::Instance().GetDebugFont()); + + const auto width = [&fm](QString text) { +#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)) + return fm.horizontalAdvance(text); +#else + return fm.width(text); +#endif + }; + const int rowh = fm.height() + 1; verticalHeader()->setMaximumSectionSize(rowh); horizontalHeader()->setMinimumSectionSize(rowh + 5); setColumnWidth(CODE_VIEW_COLUMN_BREAKPOINT, rowh + 5); - setColumnWidth(CODE_VIEW_COLUMN_ADDRESS, fm.width(QStringLiteral("80000000")) + extra_text_width); + setColumnWidth(CODE_VIEW_COLUMN_ADDRESS, width(QStringLiteral("80000000")) + extra_text_width); // The longest instruction is technically 'ps_merge00' (0x10000420u), but those instructions are // very rare and would needlessly increase the column size, so let's go with 'rlwinm.' instead. @@ -210,11 +219,10 @@ void CodeViewWidget::FontBasedSizing() const std::string ins = (split == std::string::npos ? disas : disas.substr(0, split)); const std::string param = (split == std::string::npos ? "" : disas.substr(split + 1)); setColumnWidth(CODE_VIEW_COLUMN_INSTRUCTION, - fm.width(QString::fromStdString(ins)) + extra_text_width); + width(QString::fromStdString(ins)) + extra_text_width); setColumnWidth(CODE_VIEW_COLUMN_PARAMETERS, - fm.width(QString::fromStdString(param)) + extra_text_width); - setColumnWidth(CODE_VIEW_COLUMN_DESCRIPTION, - fm.width(QStringLiteral("0")) * 25 + extra_text_width); + width(QString::fromStdString(param)) + extra_text_width); + setColumnWidth(CODE_VIEW_COLUMN_DESCRIPTION, width(QStringLiteral("0")) * 25 + extra_text_width); Update(); } diff --git a/Source/Core/DolphinQt/Debugger/NetworkWidget.cpp b/Source/Core/DolphinQt/Debugger/NetworkWidget.cpp index e05d617f11..537bf4be65 100644 --- a/Source/Core/DolphinQt/Debugger/NetworkWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/NetworkWidget.cpp @@ -90,6 +90,16 @@ QTableWidgetItem* GetSocketState(s32 host_fd) return new QTableWidgetItem(QTableWidget::tr("Unbound")); } +static QString GetAddressAndPort(const sockaddr_in& addr) +{ + char buffer[16]; + const char* addr_str = inet_ntop(AF_INET, &addr.sin_addr, buffer, sizeof(buffer)); + if (!addr_str) + return {}; + + return QStringLiteral("%1:%2").arg(QString::fromLatin1(addr_str)).arg(ntohs(addr.sin_port)); +} + QTableWidgetItem* GetSocketName(s32 host_fd) { if (host_fd < 0) @@ -100,18 +110,19 @@ QTableWidgetItem* GetSocketName(s32 host_fd) if (getsockname(host_fd, reinterpret_cast(&sock_addr), &sock_addr_len) != 0) return new QTableWidgetItem(QTableWidget::tr("Unknown")); - const QString sock_name = QStringLiteral("%1:%2") - .arg(QString::fromLatin1(inet_ntoa(sock_addr.sin_addr))) - .arg(ntohs(sock_addr.sin_port)); + const QString sock_name = GetAddressAndPort(sock_addr); + if (sock_name.isEmpty()) + return new QTableWidgetItem(QTableWidget::tr("Unknown")); sockaddr_in peer_addr; socklen_t peer_addr_len = sizeof(sockaddr_in); if (getpeername(host_fd, reinterpret_cast(&peer_addr), &peer_addr_len) != 0) return new QTableWidgetItem(sock_name); - const QString peer_name = QStringLiteral("%1:%2") - .arg(QString::fromLatin1(inet_ntoa(peer_addr.sin_addr))) - .arg(ntohs(peer_addr.sin_port)); + const QString peer_name = GetAddressAndPort(peer_addr); + if (peer_name.isEmpty()) + return new QTableWidgetItem(sock_name); + return new QTableWidgetItem(QStringLiteral("%1->%2").arg(sock_name).arg(peer_name)); } } // namespace diff --git a/Source/Core/VideoCommon/CommandProcessor.cpp b/Source/Core/VideoCommon/CommandProcessor.cpp index 59ca391f55..eb571a4672 100644 --- a/Source/Core/VideoCommon/CommandProcessor.cpp +++ b/Source/Core/VideoCommon/CommandProcessor.cpp @@ -196,7 +196,7 @@ void RegisterMMIO(MMIO::Mapping* mmio, u32 base) } mmio->Register(base | FIFO_BP_LO, MMIO::DirectRead(MMIO::Utils::LowPart(&fifo.CPBreakpoint)), - MMIO::ComplexWrite([](u32, u16 val) { + MMIO::ComplexWrite([WMASK_LO_ALIGN_32BIT](u32, u16 val) { WriteLow(fifo.CPBreakpoint, val & WMASK_LO_ALIGN_32BIT); })); mmio->Register(base | FIFO_BP_HI,