From 99c325ed5bf42b67211714a23b71c42fdc2aa43d Mon Sep 17 00:00:00 2001 From: fincs Date: Thu, 19 Sep 2019 12:56:21 +0200 Subject: [PATCH] Further cleanup in SM code; smEncodeName is now constexpr --- nx/include/switch/services/sm.h | 8 +++++++- nx/source/services/fatal.c | 1 + nx/source/services/sm.c | 34 +++++++++------------------------ 3 files changed, 17 insertions(+), 26 deletions(-) diff --git a/nx/include/switch/services/sm.h b/nx/include/switch/services/sm.h index a9ad7445..cf21a53f 100644 --- a/nx/include/switch/services/sm.h +++ b/nx/include/switch/services/sm.h @@ -168,7 +168,13 @@ Service *smGetServiceSession(void); * @param[in] name Name of the service. * @return Encoded name. */ -u64 smEncodeName(const char* name); +NX_CONSTEXPR u64 smEncodeName(const char* name) +{ + u64 name_encoded = 0; + for (unsigned i = 0; name[i] && i < 8; i ++) + name_encoded |= ((u64) name[i]) << (8*i); + return name_encoded; +} /** * @brief Overrides a service with a custom IPC service handle. diff --git a/nx/source/services/fatal.c b/nx/source/services/fatal.c index fa594ba0..d3552c59 100644 --- a/nx/source/services/fatal.c +++ b/nx/source/services/fatal.c @@ -3,6 +3,7 @@ #include "result.h" #include "kernel/detect.h" #include "kernel/svc.h" +#include "sf/service.h" #include "services/fatal.h" #include "services/sm.h" diff --git a/nx/source/services/sm.c b/nx/source/services/sm.c index 3954ede0..153841c5 100644 --- a/nx/source/services/sm.c +++ b/nx/source/services/sm.c @@ -2,7 +2,7 @@ #include "types.h" #include "result.h" #include "arm/atomics.h" -#include "kernel/ipc.h" +#include "sf/service.h" #include "services/fatal.h" #include "services/sm.h" @@ -94,37 +94,24 @@ Service *smGetServiceSession(void) return &g_smSrv; } -u64 smEncodeName(const char* name) -{ - u64 name_encoded = 0; - size_t i; - - for (i=0; i<8; i++) - { - if (name[i] == '\0') - break; - - name_encoded |= ((u64) name[i]) << (8*i); - } - - return name_encoded; -} - Result smGetService(Service* service_out, const char* name) { u64 name_encoded = smEncodeName(name); Handle handle = smGetServiceOverride(name_encoded); + bool own_handle = false; + Result rc = 0; - if (handle != INVALID_HANDLE) + if (handle == INVALID_HANDLE) { - serviceCreate(service_out, handle); - service_out->own_handle = 0; - return 0; + own_handle = true; + rc = smGetServiceOriginal(&handle, name_encoded); } - Result rc = smGetServiceOriginal(&handle, name_encoded); if (R_SUCCEEDED(rc)) + { serviceCreate(service_out, handle); + service_out->own_handle = own_handle; + } return rc; } @@ -157,9 +144,6 @@ Result smRegisterService(Handle* handle_out, const char* name, bool is_light, in Result smUnregisterService(const char* name) { - IpcCommand c; - ipcInitialize(&c); - const struct { u64 service_name; } in = { smEncodeName(name) };