1 bc7cb1a1 2003-11-23 devnull #include <u.h>
2 bc7cb1a1 2003-11-23 devnull #include <libc.h>
5 24c8d849 2004-04-21 devnull ulong mode = 0777L;
8 aeb54c0e 2004-04-15 devnull usage(void)
10 24c8d849 2004-04-21 devnull fprint(2, "usage: mkdir [-p] [-m mode] dir...\n");
11 aeb54c0e 2004-04-15 devnull exits("usage");
15 aeb54c0e 2004-04-15 devnull makedir(char *s)
19 aeb54c0e 2004-04-15 devnull if(access(s, AEXIST) == 0){
20 aeb54c0e 2004-04-15 devnull fprint(2, "mkdir: %s already exists\n", s);
21 aeb54c0e 2004-04-15 devnull e = "error";
22 aeb54c0e 2004-04-15 devnull return -1;
24 24c8d849 2004-04-21 devnull f = create(s, OREAD, DMDIR | mode);
25 aeb54c0e 2004-04-15 devnull if(f < 0){
26 aeb54c0e 2004-04-15 devnull fprint(2, "mkdir: can't create %s: %r\n", s);
27 aeb54c0e 2004-04-15 devnull e = "error";
28 aeb54c0e 2004-04-15 devnull return -1;
30 aeb54c0e 2004-04-15 devnull close(f);
31 aeb54c0e 2004-04-15 devnull return 0;
35 aeb54c0e 2004-04-15 devnull mkdirp(char *s)
39 aeb54c0e 2004-04-15 devnull for(p=strchr(s+1, '/'); p; p=strchr(p+1, '/')){
41 aeb54c0e 2004-04-15 devnull if(access(s, AEXIST) != 0 && makedir(s) < 0)
43 aeb54c0e 2004-04-15 devnull *p = '/';
45 aeb54c0e 2004-04-15 devnull if(access(s, AEXIST) != 0)
46 aeb54c0e 2004-04-15 devnull makedir(s);
51 bc7cb1a1 2003-11-23 devnull main(int argc, char *argv[])
53 aeb54c0e 2004-04-15 devnull int i, pflag;
56 aeb54c0e 2004-04-15 devnull pflag = 0;
57 aeb54c0e 2004-04-15 devnull ARGBEGIN{
60 24c8d849 2004-04-21 devnull case 'm':
61 24c8d849 2004-04-21 devnull m = ARGF();
62 24c8d849 2004-04-21 devnull if(m == nil)
64 24c8d849 2004-04-21 devnull mode = strtoul(m, &m, 8);
65 24c8d849 2004-04-21 devnull if(mode > 0777)
68 aeb54c0e 2004-04-15 devnull case 'p':
69 aeb54c0e 2004-04-15 devnull pflag = 1;
73 aeb54c0e 2004-04-15 devnull for(i=0; i<argc; i++){
74 aeb54c0e 2004-04-15 devnull if(pflag)
75 aeb54c0e 2004-04-15 devnull mkdirp(argv[i]);
77 aeb54c0e 2004-04-15 devnull makedir(argv[i]);
79 bc7cb1a1 2003-11-23 devnull exits(e);