diff --git a/rpcs3/Emu/GDB.cpp b/rpcs3/Emu/GDB.cpp index 049dfb419c..26da12ee51 100644 --- a/rpcs3/Emu/GDB.cpp +++ b/rpcs3/Emu/GDB.cpp @@ -27,8 +27,9 @@ #include // sockaddr_un #endif -#include #include +#include +#include extern bool ppu_breakpoint(u32 addr, bool is_adding); @@ -46,8 +47,6 @@ void set_nonblocking(int s) } #define sscanf_s sscanf -#define HEX_U32 "x" -#define HEX_U64 "lx" #else void set_nonblocking(int s) @@ -56,8 +55,6 @@ void set_nonblocking(int s) ioctlsocket(s, FIONBIO, &mode); } -#define HEX_U32 "lx" -#define HEX_U64 "llx" #endif struct gdb_cmd @@ -79,34 +76,33 @@ bool check_errno_again() } std::string u32_to_hex(u32 i) { - return fmt::format("%" HEX_U32, i); + return fmt::format("%x", i); } std::string u64_to_padded_hex(u64 value) { - return fmt::format("%.16" HEX_U64, value); + return fmt::format("%.16x", value); } std::string u32_to_padded_hex(u32 value) { - return fmt::format("%.8" HEX_U32, value); + return fmt::format("%.8x", value); } -u8 hex_to_u8(std::string val) { - u8 result; - sscanf_s(val.c_str(), "%02hhX", &result); +template +T hex_to(std::string_view val) +{ + T result; + auto [ptr, err] = std::from_chars(val.data(), val.data() + val.size(), result, 16); + if (err != std::errc()) + { + fmt::throw_exception("Failed to read hex string: %s", std::make_error_code(err).message()); + } + return result; } -u32 hex_to_u32(std::string val) { - u32 result; - sscanf_s(val.c_str(), "%" HEX_U32, &result); - return result; -} - -u64 hex_to_u64(std::string val) { - u64 result; - sscanf_s(val.c_str(), "%" HEX_U64, &result); - return result; -} +constexpr auto& hex_to_u8 = hex_to; +constexpr auto& hex_to_u32 = hex_to; +constexpr auto& hex_to_u64 = hex_to; void gdb_thread::start_server() {