From 708526c68cbed7b20cc9b0e8a384307944491da5 Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 14 Jan 2026 01:12:49 +0800 Subject: [PATCH] Add basic_string_view overload for utils::string::copy --- src/common/utils/string.hpp | 15 +++++++++++++++ src/windows-emulator/kusd_mmio.cpp | 5 ++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/common/utils/string.hpp b/src/common/utils/string.hpp index a732217d..c887de7f 100644 --- a/src/common/utils/string.hpp +++ b/src/common/utils/string.hpp @@ -30,6 +30,21 @@ namespace utils::string 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 std::basic_string_view str) + { + if constexpr (Size == 0) + { + return; + } + + const auto size = std::min(Size - 1, str.size()); + memcpy(array, str.data(), size * sizeof(T)); + array[size] = {}; + } + inline char char_to_lower(const char val) { return static_cast(std::tolower(static_cast(val))); diff --git a/src/windows-emulator/kusd_mmio.cpp b/src/windows-emulator/kusd_mmio.cpp index b4ccd5d5..076ce0d9 100644 --- a/src/windows-emulator/kusd_mmio.cpp +++ b/src/windows-emulator/kusd_mmio.cpp @@ -1,6 +1,7 @@ #include "std_include.hpp" #include "kusd_mmio.hpp" #include +#include #include "windows_emulator.hpp" #include "version/windows_version_manager.hpp" @@ -83,9 +84,7 @@ namespace kusd.ProcessorFeatures.arr[PF_RDPID_INSTRUCTION_AVAILABLE] = 0; const auto& system_root = version.get_system_root(); - const auto& root_str = system_root.u16string(); - const auto copy_size = std::min(root_str.size() * sizeof(char16_t), sizeof(kusd.NtSystemRoot.arr) - sizeof(char16_t)); - memcpy(&kusd.NtSystemRoot.arr[0], root_str.data(), copy_size); + utils::string::copy(kusd.NtSystemRoot.arr, std::u16string_view{system_root.u16string()}); kusd.ImageNumberLow = IMAGE_FILE_MACHINE_AMD64; kusd.ImageNumberHigh = IMAGE_FILE_MACHINE_AMD64;