mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
49 lines
1.2 KiB
C
49 lines
1.2 KiB
C
#define NX_SERVICE_ASSUME_NON_DOMAIN
|
|
#include "service_guard.h"
|
|
#include "runtime/hosversion.h"
|
|
#include "services/ectx.h"
|
|
|
|
static Service g_ectxrSrv;
|
|
|
|
NX_GENERATE_SERVICE_GUARD(ectxr);
|
|
|
|
Result _ectxrInitialize(void) {
|
|
if (hosversionBefore(11,0,0))
|
|
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
|
return smGetService(&g_ectxrSrv, "ectx:r");
|
|
}
|
|
|
|
void _ectxrCleanup(void) {
|
|
serviceClose(&g_ectxrSrv);
|
|
}
|
|
|
|
Service* ectxrGetServiceSession(void) {
|
|
return &g_ectxrSrv;
|
|
}
|
|
|
|
Result ectxrPullContext(s32 *out0, u32 *out_total_size, u32 *out_size, void *dst, size_t dst_size, u32 descriptor, Result result) {
|
|
const struct {
|
|
u32 desc;
|
|
u32 res;
|
|
} in = { descriptor, result };
|
|
|
|
struct {
|
|
s32 unk0;
|
|
u32 total_size;
|
|
u32 size;
|
|
} out;
|
|
|
|
Result rc = serviceDispatchInOut(&g_ectxrSrv, 1, in, out,
|
|
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
|
|
.buffers = { { dst, dst_size } },
|
|
);
|
|
|
|
if (R_SUCCEEDED(rc)) {
|
|
if (out0) *out0 = out.unk0;
|
|
if (out_total_size) *out_total_size = out.total_size;
|
|
if (out_size) *out_size = out.size;
|
|
}
|
|
|
|
return rc;
|
|
}
|