Implement NextLoadPath for loader env

This commit is contained in:
plutoo 2018-01-20 19:31:29 +01:00
parent af0e9eea7d
commit 97141448e9
3 changed files with 26 additions and 2 deletions

View File

@ -18,7 +18,8 @@
#define MAKERESULT(module,description) \
((((module)&0x1FF)) | ((description)&0x1FFF)<<9)
#define MODULE_LIBNX 345
#define MODULE_LIBNX 345
enum {
LIBNX_BADRELOC=1,
LIBNX_OUTOFMEM,

View File

@ -45,3 +45,5 @@ bool envIsSyscallHinted(u8 svc);
Handle envGetOwnProcessHandle(void);
LoaderReturnFn envGetExitFuncPtr(void);
Result envSetNextLoad(const char* path, const char* argv);

View File

@ -10,6 +10,8 @@ static u64 g_overrideArgc = 0;
static void* g_overrideArgv = NULL;
static u64 g_syscallHints[2];
static Handle g_processHandle = INVALID_HANDLE;
static char* g_nextLoadPath = NULL;
static char* g_nextLoadArgv = NULL;
extern __attribute__((weak)) u32 __nx_applet_type;
@ -48,7 +50,8 @@ void envParse(void* ctx, Handle main_thread, LoaderReturnFn saved_lr)
break;
case EntryType_NextLoadPath:
// TODO
g_nextLoadPath = (char*) ent->Value[0];
g_nextLoadArgv = (char*) ent->Value[1];
break;
case EntryType_OverrideHeap:
@ -140,3 +143,21 @@ Handle envGetOwnProcessHandle(void) {
LoaderReturnFn envGetExitFuncPtr(void) {
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;
}