return(ret_val);
}
-int sys_sbrk(ssize_t increment)
+int sys_sbrk(stack_frame_t *stk)
{
process_t *cproc;
pg_dir_t *pgdir;
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);
break;
case SYS_SBRK:
- ret_val = sys_sbrk((ssize_t)stk->ebx);
+ ret_val = sys_sbrk(stk);
break;
case SYS_EXECFVE: