summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2018-01-07 15:56:57 +0100
committerbunnei <bunneidev@gmail.com>2018-01-07 23:11:54 +0100
commit80f6df5414517e575037661ffb903232bf3e590c (patch)
tree8be1c03aab7a52034363beb19c541ff442ebfd2f
parentIPC: Add functions to read the input move/copy objects from an IPC request. (diff)
downloadyuzu-80f6df5414517e575037661ffb903232bf3e590c.tar
yuzu-80f6df5414517e575037661ffb903232bf3e590c.tar.gz
yuzu-80f6df5414517e575037661ffb903232bf3e590c.tar.bz2
yuzu-80f6df5414517e575037661ffb903232bf3e590c.tar.lz
yuzu-80f6df5414517e575037661ffb903232bf3e590c.tar.xz
yuzu-80f6df5414517e575037661ffb903232bf3e590c.tar.zst
yuzu-80f6df5414517e575037661ffb903232bf3e590c.zip
-rw-r--r--src/core/hle/ipc_helpers.h12
-rw-r--r--src/core/hle/service/sm/sm.cpp4
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());
}
}