aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/man1/mkdir.18
-rw-r--r--src/cmd/mkdir.C14
2 files changed, 20 insertions, 2 deletions
diff --git a/man/man1/mkdir.1 b/man/man1/mkdir.1
index 7bae8cee..cac5818d 100644
--- a/man/man1/mkdir.1
+++ b/man/man1/mkdir.1
@@ -5,6 +5,9 @@ mkdir \- make a directory
.B mkdir
[
.B -p
+] [
+.B -m
+. I mode
]
.I dirname ...
.SH DESCRIPTION
@@ -19,6 +22,11 @@ flag is given,
.I mkdir
creates any necessary parent directories
and does not complain if the target directory already exists.
+.PP
+The
+.B -m
+flag sets the permissions to be used when creating the directory.
+The default is 0777.
.SH "SEE ALSO"
.IR rm (1)
.br
diff --git a/src/cmd/mkdir.C b/src/cmd/mkdir.C
index 11421d97..1c16565d 100644
--- a/src/cmd/mkdir.C
+++ b/src/cmd/mkdir.C
@@ -2,11 +2,12 @@
#include <libc.h>
char *e;
+ulong mode = 0777L;
void
usage(void)
{
- fprint(2, "usage: mkdir [-p] dir...\n");
+ fprint(2, "usage: mkdir [-p] [-m mode] dir...\n");
exits("usage");
}
@@ -20,7 +21,7 @@ makedir(char *s)
e = "error";
return -1;
}
- f = create(s, OREAD, DMDIR | 0777L);
+ f = create(s, OREAD, DMDIR | mode);
if(f < 0){
fprint(2, "mkdir: can't create %s: %r\n", s);
e = "error";
@@ -50,11 +51,20 @@ void
main(int argc, char *argv[])
{
int i, pflag;
+ char *m;
pflag = 0;
ARGBEGIN{
default:
usage();
+ case 'm':
+ m = ARGF();
+ if(m == nil)
+ usage();
+ mode = strtoul(m, &m, 8);
+ if(mode > 0777)
+ usage();
+ break;
case 'p':
pflag = 1;
break;