]> git.corax.cc Git - corax/commitdiff
Implement sys_mmap() function
authorMatthias Kruk <m@m10k.eu>
Wed, 18 Dec 2019 09:26:18 +0000 (18:26 +0900)
committerMatthias Kruk <m@m10k.eu>
Wed, 18 Dec 2019 09:26:18 +0000 (18:26 +0900)
kernel/core/posixcall.c

index 809460d527d4edfb352efb46ed651b7463496b7e..25ff84122aeea9fd07ecab75318f11fca9f42022 100644 (file)
@@ -353,6 +353,47 @@ int sys_setsid(void)
        return(ret_val);
 }
 
+int sys_mmap(stack_frame_t *stk)
+{
+       int ret_val;
+       void *mapped;
+       void *addr;
+       size_t len;
+       int prot;
+       int flags;
+       int fd;
+       size_t offset;
+       process_t *cproc;
+
+       ret_val = -EFAULT;
+       mapped = (void*)-1;
+
+       addr = (void*)stk->ebx;
+       len = (size_t)stk->ecx;
+       prot = (int)stk->edx;
+       flags = (int)stk->esi;
+       fd = (int)stk->edi;
+       offset = (size_t)stk->ebp;
+
+       cproc = process_get_current();
+
+       if(cproc) {
+               pg_dir_t *pgdir;
+
+               ret_val = process_get_pagedir(cproc, &pgdir);
+
+               if(!ret_val) {
+                       ret_val = pg_dir_mmap(pgdir, addr, len, prot, flags, &mapped);
+               }
+       }
+
+       if(!ret_val) {
+               ret_val = mapped;
+       }
+
+       return(ret_val);
+}
+
 int sys_posixcall(stack_frame_t *stk)
 {
        int ret_val;
@@ -405,6 +446,14 @@ int sys_posixcall(stack_frame_t *stk)
                ret_val = sys_execfve(stk);
                break;
 
+       case SYS_MMAP:
+               ret_val = sys_mmap(stk);
+               break;
+
+       case SYS_MUNMAP:
+               ret_val = -ENOSYS;
+               break;
+
        default:
                ret_val = -EOPNOTSUPP;
                break;