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;
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;