mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-22 13:02:38 +02:00
Implement NextLoadPath for loader env
This commit is contained in:
parent
af0e9eea7d
commit
97141448e9
@ -19,6 +19,7 @@
|
|||||||
((((module)&0x1FF)) | ((description)&0x1FFF)<<9)
|
((((module)&0x1FF)) | ((description)&0x1FFF)<<9)
|
||||||
|
|
||||||
#define MODULE_LIBNX 345
|
#define MODULE_LIBNX 345
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
LIBNX_BADRELOC=1,
|
LIBNX_BADRELOC=1,
|
||||||
LIBNX_OUTOFMEM,
|
LIBNX_OUTOFMEM,
|
||||||
|
@ -45,3 +45,5 @@ bool envIsSyscallHinted(u8 svc);
|
|||||||
Handle envGetOwnProcessHandle(void);
|
Handle envGetOwnProcessHandle(void);
|
||||||
|
|
||||||
LoaderReturnFn envGetExitFuncPtr(void);
|
LoaderReturnFn envGetExitFuncPtr(void);
|
||||||
|
|
||||||
|
Result envSetNextLoad(const char* path, const char* argv);
|
||||||
|
@ -10,6 +10,8 @@ static u64 g_overrideArgc = 0;
|
|||||||
static void* g_overrideArgv = NULL;
|
static void* g_overrideArgv = NULL;
|
||||||
static u64 g_syscallHints[2];
|
static u64 g_syscallHints[2];
|
||||||
static Handle g_processHandle = INVALID_HANDLE;
|
static Handle g_processHandle = INVALID_HANDLE;
|
||||||
|
static char* g_nextLoadPath = NULL;
|
||||||
|
static char* g_nextLoadArgv = NULL;
|
||||||
|
|
||||||
extern __attribute__((weak)) u32 __nx_applet_type;
|
extern __attribute__((weak)) u32 __nx_applet_type;
|
||||||
|
|
||||||
@ -48,7 +50,8 @@ void envParse(void* ctx, Handle main_thread, LoaderReturnFn saved_lr)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case EntryType_NextLoadPath:
|
case EntryType_NextLoadPath:
|
||||||
// TODO
|
g_nextLoadPath = (char*) ent->Value[0];
|
||||||
|
g_nextLoadArgv = (char*) ent->Value[1];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EntryType_OverrideHeap:
|
case EntryType_OverrideHeap:
|
||||||
@ -140,3 +143,21 @@ Handle envGetOwnProcessHandle(void) {
|
|||||||
LoaderReturnFn envGetExitFuncPtr(void) {
|
LoaderReturnFn envGetExitFuncPtr(void) {
|
||||||
return g_loaderRetAddr;
|
return g_loaderRetAddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result envSetNextLoad(const char* path, const char* argv)
|
||||||
|
{
|
||||||
|
if (g_nextLoadPath == NULL)
|
||||||
|
return MAKERESULT(MODULE_LIBNX, LIBNX_NOTINITIALIZED);
|
||||||
|
|
||||||
|
strcpy(g_nextLoadPath, path);
|
||||||
|
|
||||||
|
if (g_nextLoadArgv != NULL)
|
||||||
|
{
|
||||||
|
if (argv == NULL)
|
||||||
|
g_nextLoadArgv[0] = '\0';
|
||||||
|
else
|
||||||
|
strcpy(g_nextLoadArgv, argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user