diff --git a/src/arch/x86_64/syscall.asm b/src/arch/x86_64/syscall.asm index e2304955..60a59375 100644 --- a/src/arch/x86_64/syscall.asm +++ b/src/arch/x86_64/syscall.asm @@ -26,7 +26,8 @@ extern syscall_ioctl extern syscall_chdir extern syscall_fstatat extern syscall_pipe2 -func_count equ 25 +extern syscall_mkdir +func_count equ 26 func_table: @@ -55,6 +56,7 @@ func_table: dq syscall_chdir dq syscall_fstatat dq syscall_pipe2 + dq syscall_mkdir section .text global asm_syscall_entry diff --git a/src/sys/syscalls/mkdir.c b/src/sys/syscalls/mkdir.c new file mode 100644 index 00000000..2cbcb75c --- /dev/null +++ b/src/sys/syscalls/mkdir.c @@ -0,0 +1,30 @@ +#include +#include +#include +#include +#include + +syscallret syscall_mkdir(const char* pathname, mode_t mode){ + syscallret retv; + retv.ret = -1; + + if(pathname > USER_SPACE_END){ + retv.errno = 0; + return retv; + } + + proc_t* proc = arch_getcls()->thread->proc; + + char path[strlen(pathname)+1]; + + strcpy(path, pathname); + + retv.errno = vfs_mkdir(path[0] == '/' ? proc->root : proc->cwd, path, mode); + + if(retv.errno == 0) + retv.ret = 0; + + + return retv; + +}