From b4fa1825ae4e9ebeccb613611e21d125168d2ba6 Mon Sep 17 00:00:00 2001 From: yellows8 Date: Tue, 27 Feb 2018 02:08:30 -0500 Subject: [PATCH] Handle args properly, fixes issue #10. --- nx_main/loaders/builtin.c | 43 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/nx_main/loaders/builtin.c b/nx_main/loaders/builtin.c index b93f286..4d347a1 100644 --- a/nx_main/loaders/builtin.c +++ b/nx_main/loaders/builtin.c @@ -1,6 +1,42 @@ #include "../common/common.h" -static u32 argBuf[ENTRY_ARGBUFSIZE/sizeof(u32)]; +static char argBuf[ENTRY_ARGBUFSIZE]; + +static void init_args(char *dst, size_t dst_maxsize, u32 *in_args, size_t size) +{ + size_t tmplen; + u32 argi; + char *in_argdata = (char*)&in_args[1]; + + size-= sizeof(u32); + + for (argi=0; argi dst_maxsize) break; + + if (dst_maxsize < 3) break; + + *dst++ = '"'; + dst_maxsize--; + + strncpy(dst, in_argdata, tmplen); + in_argdata+= tmplen+1; + size-= tmplen+1; + dst+= tmplen; + dst_maxsize-= tmplen; + + *dst++ = '"'; + dst_maxsize--; + + if (argi+1 < in_args[0]) { + *dst++ = ' '; + dst_maxsize--; + } + } +} static bool init(void) { @@ -16,8 +52,9 @@ static void launchFile(const char* path, argData_s* args) { /*if (strncmp(path, "sdmc:/",6) == 0) path += 5;*/ - memcpy(argBuf, args->buf, sizeof(args->buf)); - Result rc = envSetNextLoad(path, (char*)&argBuf[1]); + memset(argBuf, 0, sizeof(argBuf)); + init_args(argBuf, sizeof(argBuf)-1, args->buf, sizeof(args->buf)); + Result rc = envSetNextLoad(path, argBuf); if(R_FAILED(rc)) fatalSimple(rc);//TODO: How should failing be handled? uiExitLoop(); }