From 8ce231e7c9c7b6e4ac1168929c11b1050f4adac7 Mon Sep 17 00:00:00 2001 From: SciresM Date: Tue, 1 Dec 2020 03:01:33 -0800 Subject: [PATCH] ldr: update SetProgramArguments for 11.0.0 abi change (#507) --- nx/source/services/ldr.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/nx/source/services/ldr.c b/nx/source/services/ldr.c index e2fb271a..8271577d 100644 --- a/nx/source/services/ldr.c +++ b/nx/source/services/ldr.c @@ -24,7 +24,7 @@ LDR_GENERATE_SERVICE_INIT(Shell, shel); LDR_GENERATE_SERVICE_INIT(Dmnt, dmnt); LDR_GENERATE_SERVICE_INIT(Pm, pm); -static Result _ldrSetProgramArguments(Service* srv, u64 program_id, const void *args, size_t args_size) { +static Result _ldrSetProgramArgumentsDeprecated(Service* srv, u64 program_id, const void *args, size_t args_size) { const struct { u32 args_size; u32 pad; @@ -37,6 +37,21 @@ static Result _ldrSetProgramArguments(Service* srv, u64 program_id, const void * ); } +static Result _ldrSetProgramArgumentsModern(Service* srv, u64 program_id, const void *args, size_t args_size) { + return serviceDispatchIn(srv, 0, program_id, + .buffer_attrs = { SfBufferAttr_In | SfBufferAttr_HipcPointer }, + .buffers = { { args, args_size } }, + ); +} + +static Result _ldrSetProgramArguments(Service* srv, u64 program_id, const void *args, size_t args_size) { + if (hosversionAtLeast(11,0,0)) { + return _ldrSetProgramArgumentsModern(srv, program_id, args, args_size); + } else { + return _ldrSetProgramArgumentsDeprecated(srv, program_id, args, args_size); + } +} + static Result _ldrFlushArguments(Service* srv) { return serviceDispatch(srv, 1); }