mirror of
https://github.com/switchbrew/libnx.git
synced 2025-08-05 16:09:24 +02:00
Further cleanup in SM code; smEncodeName is now constexpr
This commit is contained in:
parent
51db782e7a
commit
99c325ed5b
@ -168,7 +168,13 @@ Service *smGetServiceSession(void);
|
|||||||
* @param[in] name Name of the service.
|
* @param[in] name Name of the service.
|
||||||
* @return Encoded name.
|
* @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.
|
* @brief Overrides a service with a custom IPC service handle.
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "result.h"
|
#include "result.h"
|
||||||
#include "kernel/detect.h"
|
#include "kernel/detect.h"
|
||||||
#include "kernel/svc.h"
|
#include "kernel/svc.h"
|
||||||
|
#include "sf/service.h"
|
||||||
#include "services/fatal.h"
|
#include "services/fatal.h"
|
||||||
#include "services/sm.h"
|
#include "services/sm.h"
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "result.h"
|
#include "result.h"
|
||||||
#include "arm/atomics.h"
|
#include "arm/atomics.h"
|
||||||
#include "kernel/ipc.h"
|
#include "sf/service.h"
|
||||||
#include "services/fatal.h"
|
#include "services/fatal.h"
|
||||||
#include "services/sm.h"
|
#include "services/sm.h"
|
||||||
|
|
||||||
@ -94,37 +94,24 @@ Service *smGetServiceSession(void)
|
|||||||
return &g_smSrv;
|
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)
|
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;
|
||||||
|
Result rc = 0;
|
||||||
|
|
||||||
if (handle != INVALID_HANDLE)
|
if (handle == INVALID_HANDLE)
|
||||||
{
|
{
|
||||||
serviceCreate(service_out, handle);
|
own_handle = true;
|
||||||
service_out->own_handle = 0;
|
rc = smGetServiceOriginal(&handle, name_encoded);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Result rc = smGetServiceOriginal(&handle, name_encoded);
|
|
||||||
if (R_SUCCEEDED(rc))
|
if (R_SUCCEEDED(rc))
|
||||||
|
{
|
||||||
serviceCreate(service_out, handle);
|
serviceCreate(service_out, handle);
|
||||||
|
service_out->own_handle = own_handle;
|
||||||
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -157,9 +144,6 @@ Result smRegisterService(Handle* handle_out, const char* name, bool is_light, in
|
|||||||
|
|
||||||
Result smUnregisterService(const char* name)
|
Result smUnregisterService(const char* name)
|
||||||
{
|
{
|
||||||
IpcCommand c;
|
|
||||||
ipcInitialize(&c);
|
|
||||||
|
|
||||||
const struct {
|
const struct {
|
||||||
u64 service_name;
|
u64 service_name;
|
||||||
} in = { smEncodeName(name) };
|
} in = { smEncodeName(name) };
|
||||||
|
Loading…
Reference in New Issue
Block a user