From b89000aae9f15a5cd05be93f7d2c46a0101f1c0b Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 17 May 2025 20:45:24 +0200 Subject: [PATCH] Fix warnings --- src/common/utils/string.hpp | 24 ++++++++++++++++++++++++ src/windows-emulator/syscalls.cpp | 24 ++++++------------------ 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/common/utils/string.hpp b/src/common/utils/string.hpp index 5f59bde6..5d88643a 100644 --- a/src/common/utils/string.hpp +++ b/src/common/utils/string.hpp @@ -4,9 +4,33 @@ #include #include #include +#include namespace utils::string { + template + requires(std::is_trivially_copyable_v) + // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + void copy(T (&array)[Size], const std::basic_string_view str) + { + if constexpr (Size == 0) + { + return; + } + + const auto size = std::min(Size, str.size()); + memcpy(array, str.data(), size * sizeof(T)); + array[std::min(Size - 1, size)] = {}; + } + + template + requires(std::is_trivially_copyable_v) + // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + void copy(T (&array)[Size], const T* str) + { + copy(array, std::basic_string_view(str)); + } + inline char char_to_lower(const char val) { return static_cast(std::tolower(static_cast(val))); diff --git a/src/windows-emulator/syscalls.cpp b/src/windows-emulator/syscalls.cpp index 31e87c46..095b2fe7 100644 --- a/src/windows-emulator/syscalls.cpp +++ b/src/windows-emulator/syscalls.cpp @@ -804,19 +804,6 @@ namespace syscalls return FALSE; } - template - static void copy_string(char16_t (&array)[Size], const std::u16string_view str) - { - if constexpr (Size == 0) - { - return; - } - - const auto size = std::min(Size, str.size()); - memcpy(array, str.data(), size * 2); - array[std::min(Size - 1, size)] = 0; - } - NTSTATUS handle_NtUserEnumDisplayDevices(const syscall_context& /*c*/, const emulator_object>> str_device, const DWORD dev_num, @@ -835,11 +822,12 @@ namespace syscalls display_device.access([&](EMU_DISPLAY_DEVICEW& dev) { dev.StateFlags = 0; - copy_string(dev.DeviceName, u"\\\\.\\DISPLAY1"); - copy_string(dev.DeviceID, u"PCI\\VEN_10DE&DEV_0000&SUBSYS_00000000&REV_A1"); - copy_string(dev.DeviceString, u"Emulator Display"); - copy_string(dev.DeviceKey, u"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Video\\{00000001-" - u"0002-0003-0004-000000000005}\\0001"); + utils::string::copy(dev.DeviceName, u"\\\\.\\DISPLAY1"); + utils::string::copy(dev.DeviceID, u"PCI\\VEN_10DE&DEV_0000&SUBSYS_00000000&REV_A1"); + utils::string::copy(dev.DeviceString, u"Emulator Display"); + utils::string::copy(dev.DeviceKey, + u"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Video\\{00000001-" + u"0002-0003-0004-000000000005}\\0001"); }); return STATUS_SUCCESS;