diff --git a/mkdir.1 b/mkdir.1 index 3992e8f..31d1728 100644 --- a/mkdir.1 +++ b/mkdir.1 @@ -3,7 +3,7 @@ mkdir \- make directory .SH SYNOPSIS .B mkdir -.RB [ \-p ] +.RB [ \-pm ] .RI [ name ...] .SH DESCRIPTION .B mkdir @@ -13,5 +13,7 @@ creates the specified directories. .B \-p creates any necessary parent directories, and does not fail if the target already exists. +.B \-m +set the file permission bits of the newly created directory. .SH SEE ALSO .IR mkdir (2) diff --git a/mkdir.c b/mkdir.c index a6eafa3..57b2382 100644 --- a/mkdir.c +++ b/mkdir.c @@ -1,4 +1,5 @@ /* See LICENSE file for copyright and license details. */ +#include #include #include #include @@ -13,18 +14,24 @@ static void mkdirp(char *); static void usage(void) { - eprintf("usage: %s [-p] directory...\n", argv0); + eprintf("usage: %s [-pm] directory...\n", argv0); } int main(int argc, char *argv[]) { bool pflag = false; + bool mflag = false; + int mode; ARGBEGIN { case 'p': pflag = true; break; + case 'm': + mflag = true; + mode = estrtol(EARGF(usage()), 10); + break; default: usage(); } ARGEND; @@ -38,6 +45,9 @@ main(int argc, char *argv[]) } else if(mkdir(argv[0], S_IRWXU|S_IRWXG|S_IRWXO) == -1) { eprintf("mkdir %s:", argv[0]); } + if (mflag) + if (chmod(argv[0], mode) < 0) + eprintf("chmod %s:", argv[0]); } return 0;