sm: Minor improvements + IPC input improvements. Minor param type adjustment for smRegisterService.

This commit is contained in:
yellows8 2019-10-22 10:20:21 -04:00
parent e9e392bbe2
commit 7103b08740
No known key found for this signature in database
GPG Key ID: 0AF90DA3F1E60E43
2 changed files with 16 additions and 33 deletions

View File

@ -142,7 +142,7 @@ Handle smGetServiceOverride(u64 name);
* @param[in] max_sessions Maximum number of concurrent sessions that the service will accept. * @param[in] max_sessions Maximum number of concurrent sessions that the service will accept.
* @return Result code. * @return Result code.
*/ */
Result smRegisterService(Handle* handle_out, const char* name, bool is_light, int max_sessions); Result smRegisterService(Handle* handle_out, const char* name, bool is_light, s32 max_sessions);
/** /**
* @brief Unregisters a previously registered service in SM. * @brief Unregisters a previously registered service in SM.

View File

@ -1,4 +1,3 @@
// Copyright 2017 plutoo
#define NX_SERVICE_ASSUME_NON_DOMAIN #define NX_SERVICE_ASSUME_NON_DOMAIN
#include "service_guard.h" #include "service_guard.h"
#include "services/fatal.h" #include "services/fatal.h"
@ -14,8 +13,7 @@ static struct {
static size_t g_smOverridesNum = 0; static size_t g_smOverridesNum = 0;
void smAddOverrideHandle(u64 name, Handle handle) void smAddOverrideHandle(u64 name, Handle handle) {
{
if (g_smOverridesNum == MAX_OVERRIDES) if (g_smOverridesNum == MAX_OVERRIDES)
fatalSimple(MAKERESULT(Module_Libnx, LibnxError_TooManyOverrides)); fatalSimple(MAKERESULT(Module_Libnx, LibnxError_TooManyOverrides));
@ -27,8 +25,7 @@ void smAddOverrideHandle(u64 name, Handle handle)
g_smOverridesNum++; g_smOverridesNum++;
} }
Handle smGetServiceOverride(u64 name) Handle smGetServiceOverride(u64 name) {
{
for (size_t i = 0; i < g_smOverridesNum; i++) for (size_t i = 0; i < g_smOverridesNum; i++)
if (g_smOverrides[i].name == name) if (g_smOverrides[i].name == name)
return g_smOverrides[i].handle; return g_smOverrides[i].handle;
@ -38,8 +35,7 @@ Handle smGetServiceOverride(u64 name)
NX_GENERATE_SERVICE_GUARD(sm); NX_GENERATE_SERVICE_GUARD(sm);
Result _smInitialize(void) Result _smInitialize(void) {
{
Handle sm_handle; Handle sm_handle;
Result rc = svcConnectToNamedPort(&sm_handle, "sm:"); Result rc = svcConnectToNamedPort(&sm_handle, "sm:");
while (R_VALUE(rc) == KERNELRESULT(NotFound)) { while (R_VALUE(rc) == KERNELRESULT(NotFound)) {
@ -63,18 +59,15 @@ Result _smInitialize(void)
return rc; return rc;
} }
void _smCleanup(void) void _smCleanup(void) {
{
serviceClose(&g_smSrv); serviceClose(&g_smSrv);
} }
Service *smGetServiceSession(void) Service *smGetServiceSession(void) {
{
return &g_smSrv; return &g_smSrv;
} }
Result smGetService(Service* service_out, const char* name) Result smGetService(Service* service_out, const char* name) {
{
u64 name_encoded = smEncodeName(name); u64 name_encoded = smEncodeName(name);
Handle handle = smGetServiceOverride(name_encoded); Handle handle = smGetServiceOverride(name_encoded);
bool own_handle = false; bool own_handle = false;
@ -93,25 +86,19 @@ Result smGetService(Service* service_out, const char* name)
return rc; return rc;
} }
Result smGetServiceOriginal(Handle* handle_out, u64 name) Result smGetServiceOriginal(Handle* handle_out, u64 name) {
{ return serviceDispatchIn(&g_smSrv, 1, name,
const struct {
u64 service_name;
} in = { name };
return serviceDispatchIn(&g_smSrv, 1, in,
.out_handle_attrs = { SfOutHandleAttr_HipcMove }, .out_handle_attrs = { SfOutHandleAttr_HipcMove },
.out_handles = handle_out, .out_handles = handle_out,
); );
} }
Result smRegisterService(Handle* handle_out, const char* name, bool is_light, int max_sessions) Result smRegisterService(Handle* handle_out, const char* name, bool is_light, s32 max_sessions) {
{
const struct { const struct {
u64 service_name; u64 service_name;
u32 is_light; u8 is_light;
u32 max_sessions; s32 max_sessions;
} in = { smEncodeName(name), !!is_light, max_sessions }; } in = { smEncodeName(name), is_light!=0, max_sessions };
return serviceDispatchIn(&g_smSrv, 2, in, return serviceDispatchIn(&g_smSrv, 2, in,
.out_handle_attrs = { SfOutHandleAttr_HipcMove }, .out_handle_attrs = { SfOutHandleAttr_HipcMove },
@ -119,11 +106,7 @@ Result smRegisterService(Handle* handle_out, const char* name, bool is_light, in
); );
} }
Result smUnregisterService(const char* name) Result smUnregisterService(const char* name) {
{ u64 service_name = smEncodeName(name);
const struct { return serviceDispatchIn(&g_smSrv, 3, service_name);
u64 service_name;
} in = { smEncodeName(name) };
return serviceDispatchIn(&g_smSrv, 3, in);
} }