mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-29 13:48:21 +00:00
syscalls: umask
This commit is contained in:
@@ -41,6 +41,7 @@ syscallret syscall_fork(arch_regs* ctx){
|
||||
proc->child = newproc;
|
||||
newproc->gid = proc->gid;
|
||||
newproc->uid = proc->uid;
|
||||
newproc->umask = proc->umask;
|
||||
|
||||
vfs_acquirenode(proc->root);
|
||||
vfs_acquirenode(proc->cwd);
|
||||
|
||||
@@ -19,7 +19,7 @@ syscallret syscall_mkdir(const char* pathname, mode_t mode){
|
||||
|
||||
strcpy(path, pathname);
|
||||
|
||||
retv.errno = vfs_mkdir(path[0] == '/' ? proc->root : proc->cwd, path, mode);
|
||||
retv.errno = vfs_mkdir(path[0] == '/' ? proc->root : proc->cwd, path, mode & ~proc->umask);
|
||||
|
||||
if(retv.errno == 0)
|
||||
retv.ret = 0;
|
||||
|
||||
@@ -54,7 +54,7 @@ syscallret syscall_open(const char* pathname, int flags, mode_t mode){
|
||||
if(ret == ENOENT && (flags & O_CREAT)){
|
||||
ret = vfs_create(
|
||||
*name == '/' ? proc->root : proc->cwd,
|
||||
name, mode);
|
||||
name, mode & ~proc->umask);
|
||||
|
||||
if(ret){
|
||||
retv.errno = ret;
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#include <kernel/syscalls.h>
|
||||
#include <arch/cls.h>
|
||||
|
||||
|
||||
syscallret syscall_umask(mode_t mask){
|
||||
|
||||
syscallret retv;
|
||||
retv.errno = 0;
|
||||
|
||||
proc_t* proc = arch_getcls()->thread->proc;
|
||||
|
||||
retv.ret = proc->umask;
|
||||
proc->umask = mask & 0777;
|
||||
|
||||
return retv;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user