From 3dce07d78cd7df43d397668c74bad2e9ab8366ca Mon Sep 17 00:00:00 2001 From: yellows8 Date: Sun, 16 Dec 2018 18:10:37 -0500 Subject: [PATCH] Fixed broken object sending in ipcPrepareHeaderForDomain(), and added serviceSendObject(). --- nx/include/switch/kernel/ipc.h | 2 +- nx/include/switch/services/sm.h | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/nx/include/switch/kernel/ipc.h b/nx/include/switch/kernel/ipc.h index 4bc0e187..86c91522 100644 --- a/nx/include/switch/kernel/ipc.h +++ b/nx/include/switch/kernel/ipc.h @@ -652,7 +652,7 @@ static inline void ipcSendObjectId(IpcCommand* cmd, u32 object_id) { * @return Pointer to the raw embedded data structure in the request, ready to be filled out. */ static inline void* ipcPrepareHeaderForDomain(IpcCommand* cmd, size_t sizeof_raw, u32 object_id) { - void* raw = ipcPrepareHeader(cmd, sizeof_raw + sizeof(DomainMessageHeader)); + void* raw = ipcPrepareHeader(cmd, sizeof_raw + sizeof(DomainMessageHeader) + cmd->NumObjectIds*sizeof(u32)); DomainMessageHeader* hdr = (DomainMessageHeader*) raw; u32 *object_ids = (u32*)(((uintptr_t) raw) + sizeof(DomainMessageHeader) + sizeof_raw); diff --git a/nx/include/switch/services/sm.h b/nx/include/switch/services/sm.h index b9f467cc..8c127aff 100644 --- a/nx/include/switch/services/sm.h +++ b/nx/include/switch/services/sm.h @@ -128,6 +128,17 @@ static inline void serviceCreateSubservice(Service* s, Service* parent, IpcParse } } +/** + * @brief Sends a service object with the specified cmd. This only supports domains. + * @param[in] s Service object to send. + * @param[in] cmd IPC command structure. + */ +static inline void serviceSendObject(Service* s, IpcCommand* cmd) { + if (serviceIsDomain(s) || serviceIsDomainSubservice(s)) { + ipcSendObjectId(cmd, s->object_id); + } +} + /** * @brief Converts a regular service to a domain. * @param[in] s Service object.