1
0
Fork 0
forked from suyu/suyu

Merge pull request #12951 from liamwhite/more-ipc

ipc: additional fixes
This commit is contained in:
Narr the Reg 2024-02-09 10:51:03 -06:00 committed by GitHub
commit 52c8adc7ed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 16 additions and 4 deletions

View file

@ -280,7 +280,7 @@ void ReadInArgument(bool is_domain, CallArguments& args, const u8* raw_data, HLE
u32 value{}; u32 value{};
std::memcpy(&value, raw_data + ArgOffset, ArgSize); std::memcpy(&value, raw_data + ArgOffset, ArgSize);
std::get<ArgIndex>(args) = ctx.GetDomainHandler<ArgType::Type>(value - 1); std::get<ArgIndex>(args) = ctx.GetDomainHandler<typename ArgType::element_type>(value - 1);
return ReadInArgument<MethodArguments, CallArguments, ArgAlign, ArgEnd, HandleIndex, InBufferIndex, OutBufferIndex, true, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp); return ReadInArgument<MethodArguments, CallArguments, ArgAlign, ArgEnd, HandleIndex, InBufferIndex, OutBufferIndex, true, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp);
} else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::InCopyHandle) { } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::InCopyHandle) {

View file

@ -65,6 +65,14 @@ struct ClientProcessId {
}; };
struct ProcessId { struct ProcessId {
explicit ProcessId() : pid() {}
explicit ProcessId(u64 p) : pid(p) {}
/* implicit */ ProcessId(const ClientProcessId& c) : pid(c.pid) {}
bool operator==(const ProcessId& rhs) const {
return pid == rhs.pid;
}
explicit operator bool() const { explicit operator bool() const {
return pid != 0; return pid != 0;
} }
@ -291,4 +299,4 @@ private:
}; };
// clang-format on // clang-format on
} // namespace Service } // namespace Service

View file

@ -299,8 +299,12 @@ Result HLERequestContext::WriteToOutgoingCommandBuffer() {
if (GetManager()->IsDomain()) { if (GetManager()->IsDomain()) {
current_offset = domain_offset - static_cast<u32>(outgoing_domain_objects.size()); current_offset = domain_offset - static_cast<u32>(outgoing_domain_objects.size());
for (auto& object : outgoing_domain_objects) { for (auto& object : outgoing_domain_objects) {
GetManager()->AppendDomainHandler(std::move(object)); if (object) {
cmd_buf[current_offset++] = static_cast<u32_le>(GetManager()->DomainHandlerCount()); GetManager()->AppendDomainHandler(std::move(object));
cmd_buf[current_offset++] = static_cast<u32_le>(GetManager()->DomainHandlerCount());
} else {
cmd_buf[current_offset++] = 0;
}
} }
} }