From 397379bca3c5fc424d8c8fc79d1b04daf4f78331 Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Sun, 21 Sep 2025 22:50:39 +0200 Subject: [PATCH] Rework requesting process arguments --- kernel/proc/proc.h | 4 ++-- kernel/syscall/processctl.c | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/kernel/proc/proc.h b/kernel/proc/proc.h index 208f3b8..6545f4c 100644 --- a/kernel/proc/proc.h +++ b/kernel/proc/proc.h @@ -11,7 +11,7 @@ #define PROC_NAME_MAX 0x100 -#define PROC_STACKBLOCKS (1024*4) +#define PROC_STACKBLOCKS (1024*2) #define PROC_STACKSIZE (PROC_STACKBLOCKS * BITMAP_BLOCK_SIZE) #define PROC_MAX 0x100 // max amount of processes @@ -19,7 +19,7 @@ #define PROC_VFSHANDLES_MAX 0x80 #define PROC_PIPEHANDLES_MAX 0x20 -#define PROC_MMAN_MAP_BASE 0x700000000000 +#define PROC_MMAN_MAP_BASE 0x500000000000 #define PROC_USER_STACK_TOP 0x800000000000 typedef struct { diff --git a/kernel/syscall/processctl.c b/kernel/syscall/processctl.c index 9d1e827..40f4752 100644 --- a/kernel/syscall/processctl.c +++ b/kernel/syscall/processctl.c @@ -91,21 +91,24 @@ int32_t SYSCALL5(sys_processctl, pid1, cmd1, arg1, arg2, arg3) { ret = proc->procargs.len; } break; case PCTL_ARGV: { - char **argbuf = (char **)arg1; + size_t *argslen = (size_t *)arg1; + char **argbuf = (char **)arg2; if (argbuf == NULL) { ret = E_INVALIDARGUMENT; goto done; } - size_t len = arg2; - size_t i; + size_t maxargs = (size_t)arg3; + ProcArg *arg, *argtmp; - LL_FOREACH_SAFE_IDX_LIMIT(proc->procargs.list, arg, argtmp, i, len) { + size_t i; + LL_FOREACH_SAFE_IDX_LIMIT(proc->procargs.list, arg, argtmp, i, maxargs) { if (argbuf[i] == NULL) { ret = E_INVALIDARGUMENT; goto done; } hal_strcpy(argbuf[i], arg->string); } + *argslen = i; ret = E_OK; } break;