From c838a2e6529e4e7329c24c9f56399f378281967b Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 10 May 2019 17:39:30 +0200 Subject: [PATCH] Shell: Add "umask" builtin for reading/writing the shell's umask. --- Shell/main.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Shell/main.cpp b/Shell/main.cpp index b8d3dd0559..98009d8c58 100644 --- a/Shell/main.cpp +++ b/Shell/main.cpp @@ -121,6 +121,26 @@ static int sh_history(int, char**) return 0; } +static int sh_umask(int argc, char** argv) +{ + if (argc == 1) { + mode_t old_mask = umask(0); + printf("%#o\n", old_mask); + umask(old_mask); + return 0; + } + if (argc == 2) { + unsigned mask; + int matches = sscanf(argv[1], "%o", &mask); + if (matches == 1) { + umask(mask); + return 0; + } + } + printf("usage: umask \n"); + return 0; +} + static bool handle_builtin(int argc, char** argv, int& retval) { if (argc == 0) @@ -145,6 +165,10 @@ static bool handle_builtin(int argc, char** argv, int& retval) retval = sh_history(argc, argv); return true; } + if (!strcmp(argv[0], "umask")) { + retval = sh_umask(argc, argv); + return true; + } return false; }