tadd -p flag.  too many install scripts want it. - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit aeb54c0efed03187235820c73b7feef2260951cf
 (DIR) parent 558ba8f4df93cb7f0a4b1ea88dd93b3828da5a2f
 (HTM) Author: rsc <devnull@localhost>
       Date:   Thu, 15 Apr 2004 01:25:21 +0000
       
       add -p flag.  too many install scripts want it.
       
       Diffstat:
         M src/cmd/mkdir.C                     |      78 ++++++++++++++++++++++++-------
       
       1 file changed, 61 insertions(+), 17 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/mkdir.C b/src/cmd/mkdir.C
       t@@ -1,26 +1,70 @@
        #include <u.h>
        #include <libc.h>
        
       +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<argc; i++){
       -                if(access(argv[i], 0) == AEXIST){
       -                        fprint(2, "mkdir: %s already exists\n", argv[i]);
       -                        e = "error";
       -                        continue;
       -                }
       -                f = create(argv[i], OREAD, DMDIR | 0777L);
       -                if(f < 0){
       -                        fprint(2, "mkdir: can't create %s: %r\n", argv[i]);
       -                        e = "error";
       -                        continue;
       -                }
       -                close(f);
       +        int i, pflag;
       +
       +        pflag = 0;
       +        ARGBEGIN{
       +        default:
       +                usage();
       +        case 'p':
       +                pflag = 1;
       +                break;
       +        }ARGEND
       +
       +        for(i=0; i<argc; i++){
       +                if(pflag)
       +                        mkdirp(argv[i]);
       +                else
       +                        makedir(argv[i]);
                }
                exits(e);
        }