sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

commit 4d014e66fd13503a71ad424a333c7c69692b23e8
parent 36afa1e1696e4f08ad10d29487bc10366beb57b1
Author: sin <sin@2f30.org>
Date:   Sat, 31 Aug 2013 22:51:25 +0100

Implement -m option for mkdir

Diffstat:
Mmkdir.1 | 4+++-
Mmkdir.c | 12+++++++++++-
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;