IPC: Fixed pushing ResultCodes into the command buffer.

They should have 32 bits of padding after the error code now.
This commit is contained in:
Subv 2018-01-07 09:56:57 -05:00 committed by bunnei
parent 32847d8b86
commit 80f6df5414
2 changed files with 9 additions and 7 deletions

View file

@ -142,6 +142,13 @@ void RequestBuilder::PushRaw(const T& value) {
index += (sizeof(T) + 3) / 4; // round up to word length index += (sizeof(T) + 3) / 4; // round up to word length
} }
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 <> template <>
inline void RequestBuilder::Push(u8 value) { inline void RequestBuilder::Push(u8 value) {
PushRaw(value); PushRaw(value);
@ -163,11 +170,6 @@ inline void RequestBuilder::Push(bool value) {
Push(static_cast<u8>(value)); Push(static_cast<u8>(value));
} }
template <>
inline void RequestBuilder::Push(ResultCode value) {
Push(value.raw);
}
template <typename First, typename... Other> template <typename First, typename... Other>
void RequestBuilder::Push(const First& first_value, const Other&... other_values) { void RequestBuilder::Push(const First& first_value, const Other&... other_values) {
Push(first_value); Push(first_value);

View file

@ -107,7 +107,7 @@ void SM::GetService(Kernel::HLERequestContext& ctx) {
auto client_port = service_manager->GetServicePort(name); auto client_port = service_manager->GetServicePort(name);
if (client_port.Failed()) { 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()); rb.Push(client_port.Code());
LOG_ERROR(Service_SM, "called service=%s -> error 0x%08X", name.c_str(), LOG_ERROR(Service_SM, "called service=%s -> error 0x%08X", name.c_str(),
client_port.Code().raw); 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(), LOG_DEBUG(Service_SM, "called service=%s -> session=%u", name.c_str(),
(*session)->GetObjectId()); (*session)->GetObjectId());
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0, 1); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0, 1);
rb.Push<u64>(0); rb.Push(session.Code());
rb.PushMoveObjects(std::move(session).Unwrap()); rb.PushMoveObjects(std::move(session).Unwrap());
} }
} }