1/* See LICENSE file for copyright and license details. */
2
3#include <sys/stat.h>
4
5#include <errno.h>
6#include <stdlib.h>
7
8#include "util.h"
9
10static void
11usage(void)
12{
13 eprintf("usage: %s [-p] [-m mode] name ...\n", argv0);
14}
15
16// ?man mkdir: create directories
17// ?man arguments: name ...
18// ?man create directories at specified paths
19int
20main(int argc, char *argv[])
21{
22 mode_t mode, mask;
23 int pflag = 0, ret = 0;
24
25 mask = umask(0);
26 mode = 0777 & ~mask;
27
28 ARGBEGIN
29 {
30 // ?man -p: create parent directories as needed
31 case 'p':
32 pflag = 1;
33 break;
34 // ?man -m:mode: set file mode bits for created directories
35 case 'm':
36 mode = parsemode(EARGF(usage()), 0777, mask);
37 break;
38 default:
39 usage();
40 }
41 ARGEND
42
43 if (!argc)
44 usage();
45
46 for (; *argv; argc--, argv++) {
47 if (pflag) {
48 if (mkdirp(*argv, mode, 0777 & (~mask | 0300)) < 0)
49 ret = 1;
50 } else if (mkdir(*argv, mode) < 0) {
51 weprintf("mkdir %s:", *argv);
52 ret = 1;
53 }
54 }
55
56 return ret;
57}