From: Matthias Kruk Date: Mon, 16 Dec 2019 14:13:16 +0000 (+0900) Subject: Make the sbrk() syscall behave as specified in brk(2) with regards to the return... X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=284331e30973ebbfee38a02145d5f7ebdc0ba801;p=corax Make the sbrk() syscall behave as specified in brk(2) with regards to the return value --- diff --git a/kernel/core/posixcall.c b/kernel/core/posixcall.c index 8d3985d..809460d 100644 --- a/kernel/core/posixcall.c +++ b/kernel/core/posixcall.c @@ -49,7 +49,7 @@ int sys_fork(stack_frame_t *stk) return(ret_val); } -int sys_sbrk(ssize_t increment) +int sys_sbrk(stack_frame_t *stk) { process_t *cproc; pg_dir_t *pgdir; @@ -62,7 +62,17 @@ int sys_sbrk(ssize_t increment) ret_val = process_get_pagedir(cproc, &pgdir); if(!ret_val) { - ret_val = (int)pg_dir_sbrk(pgdir, increment); + void *brk; + + brk = pg_dir_sbrk(pgdir, (ssize_t)stk->ebx); + + if(brk) { + stk->eax = (u32_t)brk; + ret_val = 0; + } else { + stk->eax = (u32_t)-1; + ret_val = -ENOMEM; + } } process_unlock(cproc); @@ -388,7 +398,7 @@ int sys_posixcall(stack_frame_t *stk) break; case SYS_SBRK: - ret_val = sys_sbrk((ssize_t)stk->ebx); + ret_val = sys_sbrk(stk); break; case SYS_EXECFVE: