master xplshn/aruu / cmd / posix / mkdir.c
 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}