Blob
1 #include <u.h>2 #include <libc.h>4 char *e;6 void7 usage(void)8 {9 fprint(2, "usage: mkdir [-p] dir...\n");10 exits("usage");11 }13 int14 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 void34 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 void50 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 }ARGEND63 for(i=0; i<argc; i++){64 if(pflag)65 mkdirp(argv[i]);66 else67 makedir(argv[i]);68 }69 exits(e);70 }