Blob


1 #include <u.h>
2 #include <libc.h>
4 char *e;
6 void
7 usage(void)
8 {
9 fprint(2, "usage: mkdir [-p] dir...\n");
10 exits("usage");
11 }
13 int
14 makedir(char *s)
15 {
16 int f;
18 if(access(s, AEXIST) == 0){
19 fprint(2, "mkdir: %s already exists\n", s);
20 e = "error";
21 return -1;
22 }
23 f = create(s, OREAD, DMDIR | 0777L);
24 if(f < 0){
25 fprint(2, "mkdir: can't create %s: %r\n", s);
26 e = "error";
27 return -1;
28 }
29 close(f);
30 return 0;
31 }
33 void
34 mkdirp(char *s)
35 {
36 char *p;
38 for(p=strchr(s+1, '/'); p; p=strchr(p+1, '/')){
39 *p = 0;
40 if(access(s, AEXIST) != 0 && makedir(s) < 0)
41 return;
42 *p = '/';
43 }
44 if(access(s, AEXIST) != 0)
45 makedir(s);
46 }
49 void
50 main(int argc, char *argv[])
51 {
52 int i, pflag;
54 pflag = 0;
55 ARGBEGIN{
56 default:
57 usage();
58 case 'p':
59 pflag = 1;
60 break;
61 }ARGEND
63 for(i=0; i<argc; i++){
64 if(pflag)
65 mkdirp(argv[i]);
66 else
67 makedir(argv[i]);
68 }
69 exits(e);
70 }