From bc8746640040bf12b5534866fa2ea07fab895ab6 Mon Sep 17 00:00:00 2001 From: TuxSH Date: Wed, 12 Jul 2017 19:18:27 +0200 Subject: [PATCH] srv: code bugfixes: - Fix srvPublishToSubscriber documentation - Fix handling of service/named port names of length 8 - Fix srvRegisterPort --- libctru/include/3ds/srv.h | 2 +- libctru/source/srv.c | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/libctru/include/3ds/srv.h b/libctru/include/3ds/srv.h index d121cb1..47aa4bc 100644 --- a/libctru/include/3ds/srv.h +++ b/libctru/include/3ds/srv.h @@ -94,7 +94,7 @@ Result srvReceiveNotification(u32* notificationIdOut); /** * @brief Publishes a notification to subscribers. * @param notificationId ID of the notification. - * @param flags Flags to publish with. (bit 0 = only fire if not fired, bit 1 = report errors) + * @param flags Flags to publish with. (bit 0 = only fire if not fired, bit 1 = do not report an error if there are more than 16 pending notifications) */ Result srvPublishToSubscriber(u32 notificationId, u32 flags); diff --git a/libctru/source/srv.c b/libctru/source/srv.c index e5b6652..5e9a2a2 100644 --- a/libctru/source/srv.c +++ b/libctru/source/srv.c @@ -90,7 +90,7 @@ Result srvRegisterService(Handle* out, const char* name, int maxSessions) cmdbuf[0] = IPC_MakeHeader(0x3,4,0); // 0x30100 strncpy((char*) &cmdbuf[1], name,8); - cmdbuf[3] = strlen(name); + cmdbuf[3] = strnlen(name, 8); cmdbuf[4] = maxSessions; if(R_FAILED(rc = svcSendSyncRequest(srvHandle)))return rc; @@ -107,7 +107,7 @@ Result srvUnregisterService(const char* name) cmdbuf[0] = IPC_MakeHeader(0x4,3,0); // 0x400C0 strncpy((char*) &cmdbuf[1], name,8); - cmdbuf[3] = strlen(name); + cmdbuf[3] = strnlen(name, 8); if(R_FAILED(rc = svcSendSyncRequest(srvHandle)))return rc; @@ -121,7 +121,7 @@ Result srvGetServiceHandleDirect(Handle* out, const char* name) cmdbuf[0] = IPC_MakeHeader(0x5,4,0); // 0x50100 strncpy((char*) &cmdbuf[1], name,8); - cmdbuf[3] = strlen(name); + cmdbuf[3] = strnlen(name, 8); cmdbuf[4] = 0x0; if(R_FAILED(rc = svcSendSyncRequest(srvHandle)))return rc; @@ -138,8 +138,8 @@ Result srvRegisterPort(const char* name, Handle clientHandle) cmdbuf[0] = IPC_MakeHeader(0x6,3,2); // 0x600C2 strncpy((char*) &cmdbuf[1], name,8); - cmdbuf[3] = strlen(name); - cmdbuf[4] = IPC_Desc_SharedHandles(0); + cmdbuf[3] = strnlen(name, 8); + cmdbuf[4] = IPC_Desc_SharedHandles(1); cmdbuf[5] = clientHandle; if(R_FAILED(rc = svcSendSyncRequest(srvHandle)))return rc; @@ -154,7 +154,7 @@ Result srvUnregisterPort(const char* name) cmdbuf[0] = IPC_MakeHeader(0x7,3,0); // 0x700C0 strncpy((char*) &cmdbuf[1], name,8); - cmdbuf[3] = strlen(name); + cmdbuf[3] = strnlen(name, 8); if(R_FAILED(rc = svcSendSyncRequest(srvHandle)))return rc; @@ -168,7 +168,7 @@ Result srvGetPort(Handle* out, const char* name) cmdbuf[0] = IPC_MakeHeader(0x8,4,0); // 0x80100 strncpy((char*) &cmdbuf[1], name,8); - cmdbuf[3] = strlen(name); + cmdbuf[3] = strnlen(name, 8); cmdbuf[4] = 0x0; if(R_FAILED(rc = svcSendSyncRequest(srvHandle)))return rc; @@ -255,7 +255,7 @@ Result srvIsServiceRegistered(bool* registeredOut, const char* name) cmdbuf[0] = IPC_MakeHeader(0xE,3,0); // 0xE00C0 strncpy((char*) &cmdbuf[1], name,8); - cmdbuf[3] = strlen(name); + cmdbuf[3] = strnlen(name, 8); if(R_FAILED(rc = svcSendSyncRequest(srvHandle)))return rc;