diff --git a/include/linux/sys.h b/include/linux/sys.h index 8c92ab3e1792a060b3d760c7bcf7766d945e72d9..532b87be17f0a111c66ee25a701dd47f9e8a658d 100644 --- a/include/linux/sys.h +++ b/include/linux/sys.h @@ -58,7 +58,7 @@ extern int sys_mpx(); //extern int sys_setpgid(); extern int sys_ulimit(); extern int sys_uname(); -//extern int sys_umask(); +extern int sys_umask(); extern int sys_chroot(); //extern int sys_ustat(); //extern int sys_dup2(); @@ -156,7 +156,7 @@ fn_ptr sys_call_table[] = { sys_ulimit, sys_uname, - 0, // sys_umask, + sys_umask, sys_chroot, 0, // sys_ustat, 0, // sys_dup2, diff --git a/include/unistd.h b/include/unistd.h index f180a18082f8c28a90ac450656320ef2bd9b2ed8..f2436f25520185aa57967c4e296e29c42ebefa8a 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -168,6 +168,7 @@ int lseek(int fildes, off_t offset, int origin); int rmdir(const char* pathname); time_t time(time_t * tloc); +mode_t umask(mode_t mask); int uname(struct utsname * name); #endif diff --git a/kernel/sys.c b/kernel/sys.c index e1145959c8e7258dc3f94facf280e4d4d9663ade..6e29cda4616185e899035496d7e58cb257091d97 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -102,3 +102,10 @@ int sys_uname(struct utsname * name) { return 0; } +int sys_umask(int mask) { + int old = current->umask; + + current->umask = mask & 0777; + return (old); +} +