Bladeren bron

Shell: Add "umask" builtin for reading/writing the shell's umask.

Andreas Kling 6 jaren geleden
bovenliggende
commit
c838a2e652
1 gewijzigde bestanden met toevoegingen van 24 en 0 verwijderingen
  1. 24 0
      Shell/main.cpp

+ 24 - 0
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 <octal-mask>\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;
 }