From 04d723baf96e35222c922fb212f92e60f8b7370c Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 12 Sep 2018 04:49:08 -0400 Subject: svc: Correct parameter type for OutputDebugString() This should be a u64 to represent size. --- src/core/hle/kernel/svc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/core/hle/kernel/svc.cpp') diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 1c9373ed8..07a6c4014 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp @@ -273,7 +273,7 @@ static void Break(u64 reason, u64 info1, u64 info2) { } /// Used to output a message on a debug hardware unit - does nothing on a retail unit -static void OutputDebugString(VAddr address, s32 len) { +static void OutputDebugString(VAddr address, u64 len) { std::string str(len, '\0'); Memory::ReadBlock(address, str.data(), str.size()); LOG_DEBUG(Debug_Emulated, "{}", str); -- cgit v1.2.3 From 9b3bc0b282393a9bf19b4bcb1c2830a879278fbf Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 12 Sep 2018 04:51:41 -0400 Subject: svc: Do nothing if svcOutputDebugString() is given a length of zero While unlikely, it does avoid constructing a std::string and unnecessarily calling into the memory code if a game or executable decides to be really silly about their logging. --- src/core/hle/kernel/svc.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/core/hle/kernel/svc.cpp') diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 07a6c4014..0b2a7e3cb 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp @@ -274,6 +274,10 @@ static void Break(u64 reason, u64 info1, u64 info2) { /// Used to output a message on a debug hardware unit - does nothing on a retail unit static void OutputDebugString(VAddr address, u64 len) { + if (len == 0) { + return; + } + std::string str(len, '\0'); Memory::ReadBlock(address, str.data(), str.size()); LOG_DEBUG(Debug_Emulated, "{}", str); -- cgit v1.2.3