commit 4d014e66fd13503a71ad424a333c7c69692b23e8
parent 36afa1e1696e4f08ad10d29487bc10366beb57b1
Author: sin <sin@2f30.org>
Date: Sat, 31 Aug 2013 22:51:25 +0100
Implement -m option for mkdir
Diffstat:
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git 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
@@ -1,4 +1,5 @@
/* See LICENSE file for copyright and license details. */
+#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdbool.h>
@@ -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;