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