Further cleanup in SM code; smEncodeName is now constexpr

This commit is contained in:
fincs 2019-09-19 12:56:21 +02:00
parent 51db782e7a
commit 99c325ed5b
No known key found for this signature in database
GPG Key ID: 62C7609ADA219C60
3 changed files with 17 additions and 26 deletions

View File

@ -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.

View File

@ -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"

View File

@ -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) };