]> git.corax.cc Git - corax/commitdiff
Make the sbrk() syscall behave as specified in brk(2) with regards to the return...
authorMatthias Kruk <m@m10k.eu>
Mon, 16 Dec 2019 14:13:16 +0000 (23:13 +0900)
committerMatthias Kruk <m@m10k.eu>
Mon, 16 Dec 2019 14:13:16 +0000 (23:13 +0900)
kernel/core/posixcall.c

index 8d3985d5b2fbdd42d115900181415d23ec8db96a..809460d527d4edfb352efb46ed651b7463496b7e 100644 (file)
@@ -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: