Skip to content

Commit b2d23f8

Browse files
committed
Add umask().
1 parent 77fe8e8 commit b2d23f8

File tree

6 files changed

+23
-0
lines changed

6 files changed

+23
-0
lines changed

Kernel/Process.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1320,6 +1320,13 @@ pid_t Process::sys$getppid()
13201320
return m_ppid;
13211321
}
13221322

1323+
mode_t Process::sys$umask(mode_t mask)
1324+
{
1325+
auto old_mask = m_umask;
1326+
m_umask = mask;
1327+
return old_mask;
1328+
}
1329+
13231330
pid_t Process::sys$waitpid(pid_t waitee, int* wstatus, int options)
13241331
{
13251332
if (wstatus)

Kernel/Process.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ class Process : public InlineLinkedListNode<Process> {
104104
gid_t sys$getegid();
105105
pid_t sys$getpid();
106106
pid_t sys$getppid();
107+
mode_t sys$umask(mode_t);
107108
int sys$open(const char* path, int options);
108109
int sys$close(int fd);
109110
ssize_t sys$read(int fd, void* outbuf, size_t nread);
@@ -235,6 +236,7 @@ class Process : public InlineLinkedListNode<Process> {
235236
LinearAddress m_return_from_signal_trampoline;
236237

237238
pid_t m_ppid { 0 };
239+
mode_t m_umask { 022 };
238240

239241
static void notify_waiters(pid_t waitee, int exit_status, int signal);
240242

Kernel/Syscall.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ static DWORD handle(RegisterDump& regs, DWORD function, DWORD arg1, DWORD arg2,
150150
return current->sys$dup2((int)arg1, (int)arg2);
151151
case Syscall::SC_sigaction:
152152
return current->sys$sigaction((int)arg1, (const Unix::sigaction*)arg2, (Unix::sigaction*)arg3);
153+
case Syscall::SC_umask:
154+
return current->sys$umask((mode_t)arg1);
153155
default:
154156
kprintf("<%u> int0x80: Unknown function %x requested {%x, %x, %x}\n", current->pid(), function, arg1, arg2, arg3);
155157
break;

Kernel/Syscall.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
__ENUMERATE_SYSCALL(dup2) \
5252
__ENUMERATE_SYSCALL(sigaction) \
5353
__ENUMERATE_SYSCALL(getppid) \
54+
__ENUMERATE_SYSCALL(umask) \
5455

5556

5657
#define DO_SYSCALL_A0(function) Syscall::invoke((dword)(function))

LibC/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ LIBC_OBJS = \
2323
times.o \
2424
termcap.o \
2525
setjmp.o \
26+
stat.o \
2627
entry.o
2728

2829
OBJS = $(AK_OBJS) $(LIBC_OBJS)

LibC/sys/stat.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#pragma once
2+
3+
#include <sys/cdefs.h>
4+
#include <sys/types.h>
5+
6+
__BEGIN_DECLS
7+
8+
mode_t umask(mode_t);
9+
10+
__END_DECLS

0 commit comments

Comments
 (0)