diff options
-rw-r--r-- | src/core/hle/ipc_helpers.h | 12 | ||||
-rw-r--r-- | src/core/hle/service/sm/sm.cpp | 4 |
2 files changed, 9 insertions, 7 deletions
diff --git a/src/core/hle/ipc_helpers.h b/src/core/hle/ipc_helpers.h index e5b296d60..b58e33a69 100644 --- a/src/core/hle/ipc_helpers.h +++ b/src/core/hle/ipc_helpers.h @@ -143,6 +143,13 @@ void RequestBuilder::PushRaw(const T& value) { } template <> +inline void RequestBuilder::Push(ResultCode value) { + // Result codes are actually 64-bit in the IPC buffer, but only the high part is discarded. + Push(value.raw); + Push<u32>(0); +} + +template <> inline void RequestBuilder::Push(u8 value) { PushRaw(value); } @@ -163,11 +170,6 @@ inline void RequestBuilder::Push(bool value) { Push(static_cast<u8>(value)); } -template <> -inline void RequestBuilder::Push(ResultCode value) { - Push(value.raw); -} - template <typename First, typename... Other> void RequestBuilder::Push(const First& first_value, const Other&... other_values) { Push(first_value); diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp index f1d93ea2b..509945136 100644 --- a/src/core/hle/service/sm/sm.cpp +++ b/src/core/hle/service/sm/sm.cpp @@ -107,7 +107,7 @@ void SM::GetService(Kernel::HLERequestContext& ctx) { auto client_port = service_manager->GetServicePort(name); if (client_port.Failed()) { - IPC::RequestBuilder rb = rp.MakeBuilder(1, 0, 0); + IPC::RequestBuilder rb = rp.MakeBuilder(2, 0, 0); rb.Push(client_port.Code()); LOG_ERROR(Service_SM, "called service=%s -> error 0x%08X", name.c_str(), client_port.Code().raw); @@ -120,7 +120,7 @@ void SM::GetService(Kernel::HLERequestContext& ctx) { LOG_DEBUG(Service_SM, "called service=%s -> session=%u", name.c_str(), (*session)->GetObjectId()); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0, 1); - rb.Push<u64>(0); + rb.Push(session.Code()); rb.PushMoveObjects(std::move(session).Unwrap()); } } |