tipc/sm: various fixes for issues

This commit is contained in:
Michael Scire 2021-04-10 15:32:48 -07:00
parent 2542f282e0
commit 2fe065b590
5 changed files with 11 additions and 13 deletions

View File

@ -21,8 +21,6 @@ namespace ams::ncm {
struct ProgramId { struct ProgramId {
u64 value; u64 value;
static const ProgramId Invalid;
inline explicit operator svc::ProgramId() const { inline explicit operator svc::ProgramId() const {
static_assert(sizeof(value) == sizeof(svc::ProgramId)); static_assert(sizeof(value) == sizeof(svc::ProgramId));
return { this->value }; return { this->value };
@ -53,7 +51,6 @@ namespace ams::ncm {
return lhs.value >= rhs.value; return lhs.value >= rhs.value;
} }
inline constexpr const ProgramId ProgramId::Invalid = {}; inline constexpr const ProgramId InvalidProgramId = {};
inline constexpr const ProgramId InvalidProgramId = ProgramId::Invalid;
} }

View File

@ -44,7 +44,9 @@ namespace ams::sm {
return Encode(name, std::strlen(name)); return Encode(name, std::strlen(name));
} }
}; };
static constexpr ServiceName InvalidServiceName = ServiceName::Encode("");
static constexpr inline ServiceName InvalidServiceName = ServiceName::Encode("");
static_assert(alignof(ServiceName) == 1, "ServiceName definition!"); static_assert(alignof(ServiceName) == 1, "ServiceName definition!");
inline bool operator==(const ServiceName &lhs, const ServiceName &rhs) { inline bool operator==(const ServiceName &lhs, const ServiceName &rhs) {

View File

@ -314,8 +314,8 @@ namespace ams::tipc::impl {
static constexpr svc::ipc::MessageBuffer::SpecialHeader OutSpecialHeader{false, NumOutCopyHandles, NumOutMoveHandles, HasOutSpecialHeader}; static constexpr svc::ipc::MessageBuffer::SpecialHeader OutSpecialHeader{false, NumOutCopyHandles, NumOutMoveHandles, HasOutSpecialHeader};
static constexpr auto OutMessageHandleIndex = svc::ipc::MessageBuffer::GetSpecialDataIndex(OutMessageHeader, OutSpecialHeader); static constexpr auto OutMessageHandleIndex = svc::ipc::MessageBuffer::GetSpecialDataIndex(OutMessageHeader, OutSpecialHeader);
static constexpr auto OutMessageRawDataIndex = svc::ipc::MessageBuffer::GetRawDataIndex(OutMessageHeader, OutSpecialHeader); static constexpr auto OutMessageResultIndex = svc::ipc::MessageBuffer::GetRawDataIndex(OutMessageHeader, OutSpecialHeader);
static constexpr auto OutMessageResultIndex = OutMessageRawDataIndex + OutDataSize / sizeof(u32); static constexpr auto OutMessageRawDataIndex = OutMessageResultIndex + 1;
/* Construction of argument serialization structs. */ /* Construction of argument serialization structs. */
private: private:
@ -580,11 +580,11 @@ namespace ams::tipc::impl {
/* Set output handles. */ /* Set output handles. */
out_handles_holder.CopyTo(message_buffer); out_handles_holder.CopyTo(message_buffer);
/* Set output data. */
out_raw_holder.CopyTo(message_buffer);
/* Set output result. */ /* Set output result. */
message_buffer.Set(CommandMeta::OutMessageResultIndex, result.GetValue()); message_buffer.Set(CommandMeta::OutMessageResultIndex, result.GetValue());
/* Set output data. */
out_raw_holder.CopyTo(message_buffer);
} }
}; };

View File

@ -131,11 +131,9 @@ namespace ams::tipc {
R_TRY_CATCH(svc::ReplyAndReceive(std::addressof(dummy), nullptr, 0, reply_target, 0)) { R_TRY_CATCH(svc::ReplyAndReceive(std::addressof(dummy), nullptr, 0, reply_target, 0)) {
R_CATCH(svc::ResultTimedOut) { R_CATCH(svc::ResultTimedOut) {
/* Timing out is acceptable. */ /* Timing out is acceptable. */
return R_CURRENT_RESULT;
} }
R_CATCH(svc::ResultSessionClosed) { R_CATCH(svc::ResultSessionClosed) {
/* It's okay if we couldn't reply to a closed session. */ /* It's okay if we couldn't reply to a closed session. */
return R_CURRENT_RESULT;
} }
} R_END_TRY_CATCH_WITH_ABORT_UNLESS; } R_END_TRY_CATCH_WITH_ABORT_UNLESS;

View File

@ -42,7 +42,7 @@ namespace ams::os::impl {
s32 index = WaitableManagerImpl::WaitInvalid; s32 index = WaitableManagerImpl::WaitInvalid;
static_assert(WaitableManagerImpl::WaitInvalid != -1); static_assert(WaitableManagerImpl::WaitInvalid != -1);
R_TRY_CATCH(svc::ReplyAndReceive(std::addressof(index), arr, num, ns, reply_target)) { R_TRY_CATCH(svc::ReplyAndReceive(std::addressof(index), arr, num, reply_target, ns)) {
R_CATCH(svc::ResultTimedOut) { *out_index = WaitableManagerImpl::WaitTimedOut; return R_CURRENT_RESULT; } R_CATCH(svc::ResultTimedOut) { *out_index = WaitableManagerImpl::WaitTimedOut; return R_CURRENT_RESULT; }
R_CATCH(svc::ResultCancelled) { *out_index = WaitableManagerImpl::WaitCancelled; return R_CURRENT_RESULT; } R_CATCH(svc::ResultCancelled) { *out_index = WaitableManagerImpl::WaitCancelled; return R_CURRENT_RESULT; }
R_CATCH(svc::ResultSessionClosed) { R_CATCH(svc::ResultSessionClosed) {
@ -60,6 +60,7 @@ namespace ams::os::impl {
} }
} R_END_TRY_CATCH_WITH_ABORT_UNLESS; } R_END_TRY_CATCH_WITH_ABORT_UNLESS;
*out_index = index;
return ResultSuccess(); return ResultSuccess();
} }