From aeb54c0efed03187235820c73b7feef2260951cf Mon Sep 17 00:00:00 2001 From: rsc Date: Thu, 15 Apr 2004 01:25:21 +0000 Subject: add -p flag. too many install scripts want it. --- src/cmd/mkdir.C | 78 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 61 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/cmd/mkdir.C b/src/cmd/mkdir.C index 5bfa6773..11421d97 100644 --- a/src/cmd/mkdir.C +++ b/src/cmd/mkdir.C @@ -1,26 +1,70 @@ #include #include +char *e; + +void +usage(void) +{ + fprint(2, "usage: mkdir [-p] dir...\n"); + exits("usage"); +} + +int +makedir(char *s) +{ + int f; + + if(access(s, AEXIST) == 0){ + fprint(2, "mkdir: %s already exists\n", s); + e = "error"; + return -1; + } + f = create(s, OREAD, DMDIR | 0777L); + if(f < 0){ + fprint(2, "mkdir: can't create %s: %r\n", s); + e = "error"; + return -1; + } + close(f); + return 0; +} + +void +mkdirp(char *s) +{ + char *p; + + for(p=strchr(s+1, '/'); p; p=strchr(p+1, '/')){ + *p = 0; + if(access(s, AEXIST) != 0 && makedir(s) < 0) + return; + *p = '/'; + } + if(access(s, AEXIST) != 0) + makedir(s); +} + + void main(int argc, char *argv[]) { - int i, f; - char *e; - - e = nil; - for(i=1; i