diff options
author | Narr the Reg <juangerman-13@hotmail.com> | 2024-02-09 17:51:03 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-09 17:51:03 +0100 |
commit | 52c8adc7edd1b4a5ab58d3bf17f9b4acc29a833e (patch) | |
tree | 2ff103c9bc53c3a006ef2534aa98084ccace8c1b | |
parent | Merge pull request #12920 from t895/jni-common (diff) | |
parent | ipc: additional fixes (diff) | |
download | yuzu-52c8adc7edd1b4a5ab58d3bf17f9b4acc29a833e.tar yuzu-52c8adc7edd1b4a5ab58d3bf17f9b4acc29a833e.tar.gz yuzu-52c8adc7edd1b4a5ab58d3bf17f9b4acc29a833e.tar.bz2 yuzu-52c8adc7edd1b4a5ab58d3bf17f9b4acc29a833e.tar.lz yuzu-52c8adc7edd1b4a5ab58d3bf17f9b4acc29a833e.tar.xz yuzu-52c8adc7edd1b4a5ab58d3bf17f9b4acc29a833e.tar.zst yuzu-52c8adc7edd1b4a5ab58d3bf17f9b4acc29a833e.zip |
-rw-r--r-- | src/core/hle/service/cmif_serialization.h | 2 | ||||
-rw-r--r-- | src/core/hle/service/cmif_types.h | 10 | ||||
-rw-r--r-- | src/core/hle/service/hle_ipc.cpp | 8 |
3 files changed, 16 insertions, 4 deletions
diff --git a/src/core/hle/service/cmif_serialization.h b/src/core/hle/service/cmif_serialization.h index e985fe317..f24682c34 100644 --- a/src/core/hle/service/cmif_serialization.h +++ b/src/core/hle/service/cmif_serialization.h @@ -280,7 +280,7 @@ void ReadInArgument(bool is_domain, CallArguments& args, const u8* raw_data, HLE u32 value{}; 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); } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::InCopyHandle) { diff --git a/src/core/hle/service/cmif_types.h b/src/core/hle/service/cmif_types.h index 325304d5c..dad358b87 100644 --- a/src/core/hle/service/cmif_types.h +++ b/src/core/hle/service/cmif_types.h @@ -65,6 +65,14 @@ struct ClientProcessId { }; 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 { return pid != 0; } @@ -291,4 +299,4 @@ private: }; // clang-format on -} // namespace Service
\ No newline at end of file +} // namespace Service diff --git a/src/core/hle/service/hle_ipc.cpp b/src/core/hle/service/hle_ipc.cpp index 50e1ed756..e0367e774 100644 --- a/src/core/hle/service/hle_ipc.cpp +++ b/src/core/hle/service/hle_ipc.cpp @@ -299,8 +299,12 @@ Result HLERequestContext::WriteToOutgoingCommandBuffer() { if (GetManager()->IsDomain()) { current_offset = domain_offset - static_cast<u32>(outgoing_domain_objects.size()); for (auto& object : outgoing_domain_objects) { - GetManager()->AppendDomainHandler(std::move(object)); - cmd_buf[current_offset++] = static_cast<u32_le>(GetManager()->DomainHandlerCount()); + if (object) { + GetManager()->AppendDomainHandler(std::move(object)); + cmd_buf[current_offset++] = static_cast<u32_le>(GetManager()->DomainHandlerCount()); + } else { + cmd_buf[current_offset++] = 0; + } } } |