From 26b20938dece30ab995c959621f35bc866cc77d4 Mon Sep 17 00:00:00 2001 From: apio Date: Fri, 28 Oct 2022 17:11:35 +0200 Subject: [PATCH] Kernel, libc: Use mode in mkdir() --- kernel/include/sys/Syscall.h | 2 +- kernel/src/init/InitRD.cpp | 3 ++- kernel/src/sys/Syscall.cpp | 2 +- libs/libc/src/sys/stat.cpp | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/kernel/include/sys/Syscall.h b/kernel/include/sys/Syscall.h index 594a3071..cc40242c 100644 --- a/kernel/include/sys/Syscall.h +++ b/kernel/include/sys/Syscall.h @@ -54,7 +54,7 @@ void sys_execv(Context* context, const char* pathname, char** argv); void sys_fcntl(Context* context, int fd, int command, uintptr_t arg); void sys_mprotect(Context* context, void* address, size_t size, int prot); void sys_clock(Context* context); -void sys_mkdir(Context* context, const char* filename); +void sys_mkdir(Context* context, const char* filename, mode_t mode); void sys_fork(Context* context); void sys_waitpid(Context* context, long pid, int* wstatus, int options); void sys_access(Context* context, const char* path, int amode); diff --git a/kernel/src/init/InitRD.cpp b/kernel/src/init/InitRD.cpp index ddef39ac..24ce377b 100644 --- a/kernel/src/init/InitRD.cpp +++ b/kernel/src/init/InitRD.cpp @@ -195,7 +195,7 @@ VFS::Node* initrd_read_dir(VFS::Node* node, long offset) return dir.files[offset]; } -int initrd_mkdir(VFS::Node* node, const char* name) // FIXME: Return proper error numbers. +int initrd_mkdir(VFS::Node* node, const char* name, mode_t mode) // FIXME: Return proper error numbers. { if (total_dirs >= 32) { @@ -225,6 +225,7 @@ int initrd_mkdir(VFS::Node* node, const char* name) // FIXME: Return proper erro new_node.mkdir_func = initrd_mkdir; new_node.length = 0; new_node.type = VFS_DIRECTORY; + new_node.mode = mode; new_node.uid = new_node.gid = 0; strncpy(new_node.name, name, sizeof(new_node.name)); InitRD::Directory dir; diff --git a/kernel/src/sys/Syscall.cpp b/kernel/src/sys/Syscall.cpp index 4d2fa7a3..eb6b6d12 100644 --- a/kernel/src/sys/Syscall.cpp +++ b/kernel/src/sys/Syscall.cpp @@ -27,7 +27,7 @@ void Syscall::entry(Context* context) case SYS_fcntl: sys_fcntl(context, (int)context->rdi, (int)context->rsi, context->rdx); break; case SYS_mprotect: sys_mprotect(context, (void*)context->rdi, context->rsi, (int)context->rdx); break; case SYS_clock: sys_clock(context); break; - case SYS_mkdir: sys_mkdir(context, (const char*)context->rdi); break; + case SYS_mkdir: sys_mkdir(context, (const char*)context->rdi, (mode_t)context->rsi); break; case SYS_fork: sys_fork(context); break; case SYS_waitpid: sys_waitpid(context, (long)context->rdi, (int*)context->rsi, (int)context->rdx); break; case SYS_access: sys_access(context, (const char*)context->rdi, (int)context->rsi); break; diff --git a/libs/libc/src/sys/stat.cpp b/libs/libc/src/sys/stat.cpp index 5161058c..769cfb94 100644 --- a/libs/libc/src/sys/stat.cpp +++ b/libs/libc/src/sys/stat.cpp @@ -4,9 +4,9 @@ extern "C" { - int mkdir(const char* pathname, mode_t) + int mkdir(const char* pathname, mode_t mode) { - return (int)__lc_fast_syscall1(SYS_mkdir, pathname); + return (int)__lc_fast_syscall2(SYS_mkdir, pathname, mode); } int fstat(int fd, struct stat* buf)