mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-12-22 20:31:14 +00:00
tipc/sm: various fixes for issues
This commit is contained in:
parent
57c8bc432d
commit
9be8b32311
6 changed files with 12 additions and 14 deletions
|
@ -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;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -182,7 +182,7 @@ namespace ams::sm {
|
||||||
u32 max_sessions;
|
u32 max_sessions;
|
||||||
std::memcpy(std::addressof(max_sessions), raw_message_buffer + 0x2C, sizeof(max_sessions));
|
std::memcpy(std::addressof(max_sessions), raw_message_buffer + 0x2C, sizeof(max_sessions));
|
||||||
|
|
||||||
if (command_id == 4) {
|
if (command_id == 2) {
|
||||||
/* Invoke the handler for RegisterService. */
|
/* Invoke the handler for RegisterService. */
|
||||||
tipc::MoveHandle out_handle;
|
tipc::MoveHandle out_handle;
|
||||||
const Result result = this->RegisterService(std::addressof(out_handle), service_name, max_sessions, is_light);
|
const Result result = this->RegisterService(std::addressof(out_handle), service_name, max_sessions, is_light);
|
||||||
|
|
Loading…
Reference in a new issue