diff --git a/nx/source/services/fsldr.c b/nx/source/services/fsldr.c index 146ab137..7ea45287 100644 --- a/nx/source/services/fsldr.c +++ b/nx/source/services/fsldr.c @@ -21,6 +21,10 @@ Result fsldrInitialize(void) { return 0; Result rc = smGetService(&g_fsldrSrv, "fsp-ldr"); + + if (R_SUCCEEDED(rc)) { + rc = serviceConvertToDomain(&g_fsldrSrv); + } if (R_SUCCEEDED(rc) && kernelAbove400()) { rc = fsldrSetCurrentProcess(); @@ -47,7 +51,7 @@ Result fsldrOpenCodeFileSystem(u64 tid, const char *path, FsFileSystem* out) { u64 tid; } *raw; - raw = ipcPrepareHeader(&c, sizeof(*raw)); + raw = serviceIpcPrepareHeader(&g_fsldrSrv, &c, sizeof(*raw)); raw->magic = SFCI_MAGIC; raw->cmd_id = 0; raw->tid = tid; @@ -57,17 +61,18 @@ Result fsldrOpenCodeFileSystem(u64 tid, const char *path, FsFileSystem* out) { if (R_SUCCEEDED(rc)) { IpcParsedCommand r; - ipcParse(&r); - struct { u64 magic; u64 result; - } *resp = r.Raw; + } *resp; + + serviceIpcParse(&g_fsldrSrv, &r, sizeof(*resp)); + resp = r.Raw; rc = resp->result; if (R_SUCCEEDED(rc)) { - serviceCreate(&out->s, r.Handles[0]); + serviceCreateSubservice(&out->s, &g_fsldrSrv, &r, 0); } } @@ -84,7 +89,7 @@ Result fsldrIsArchivedProgram(u64 pid, bool *out) { u64 pid; } *raw; - raw = ipcPrepareHeader(&c, sizeof(*raw)); + raw = serviceIpcPrepareHeader(&g_fsldrSrv, &c, sizeof(*raw)); raw->magic = SFCI_MAGIC; raw->cmd_id = 1; raw->pid = pid; @@ -93,13 +98,14 @@ Result fsldrIsArchivedProgram(u64 pid, bool *out) { if (R_SUCCEEDED(rc)) { IpcParsedCommand r; - ipcParse(&r); - struct { u64 magic; u64 result; u8 is_archived; - } *resp = r.Raw; + } *resp; + + serviceIpcParse(&g_fsldrSrv, &r, sizeof(*resp)); + resp = r.Raw; rc = resp->result; @@ -122,7 +128,7 @@ Result fsldrSetCurrentProcess(void) { u64 unk; } *raw; - raw = ipcPrepareHeader(&c, sizeof(*raw)); + raw = serviceIpcPrepareHeader(&g_fsldrSrv, &c, sizeof(*raw)); raw->magic = SFCI_MAGIC; raw->cmd_id = 2; @@ -132,12 +138,13 @@ Result fsldrSetCurrentProcess(void) { if (R_SUCCEEDED(rc)) { IpcParsedCommand r; - ipcParse(&r); - struct { u64 magic; u64 result; - } *resp = r.Raw; + } *resp; + + serviceIpcParse(&g_fsldrSrv, &r, sizeof(*resp)); + resp = r.Raw; rc = resp->result; }