Annotation of 41BSD/cmd/mkdir.c, revision 1.1

1.1     ! root        1: static char *sccsid = "@(#)mkdir.c     4.1 (Berkeley) 10/1/80";
        !             2: /*
        !             3: ** make directory
        !             4: */
        !             5: 
        !             6: #include       <signal.h>
        !             7: #include       <stdio.h>
        !             8: 
        !             9: int    Errors = 0;
        !            10: char   *strcat();
        !            11: char   *strcpy();
        !            12: 
        !            13: main(argc, argv)
        !            14: char *argv[];
        !            15: {
        !            16: 
        !            17:        signal(SIGHUP, SIG_IGN);
        !            18:        signal(SIGINT, SIG_IGN);
        !            19:        signal(SIGQUIT, SIG_IGN);
        !            20:        signal(SIGPIPE, SIG_IGN);
        !            21:        signal(SIGTERM, SIG_IGN);
        !            22: 
        !            23:        if(argc < 2) {
        !            24:                fprintf(stderr, "mkdir: arg count\n");
        !            25:                exit(1);
        !            26:        }
        !            27:        while(--argc)
        !            28:                mkdir(*++argv);
        !            29:        exit(Errors!=0);
        !            30: }
        !            31: 
        !            32: mkdir(d)
        !            33: char *d;
        !            34: {
        !            35:        char pname[128], dname[128];
        !            36:        register i, slash = 0;
        !            37: 
        !            38:        pname[0] = '\0';
        !            39:        for(i = 0; d[i]; ++i)
        !            40:                if(d[i] == '/')
        !            41:                        slash = i + 1;
        !            42:        if(slash)
        !            43:                strncpy(pname, d, slash);
        !            44:        strcpy(pname+slash, ".");
        !            45:        if (access(pname, 02)) {
        !            46:                fprintf(stderr,"mkdir: cannot access %s\n", pname);
        !            47:                ++Errors;
        !            48:                return;
        !            49:        }
        !            50:        if ((mknod(d, 040777, 0)) < 0) {
        !            51:                fprintf(stderr,"mkdir: cannot make directory %s\n", d);
        !            52:                ++Errors;
        !            53:                return;
        !            54:        }
        !            55:        chown(d, getuid(), getgid());
        !            56:        strcpy(dname, d);
        !            57:        strcat(dname, "/.");
        !            58:        if((link(d, dname)) < 0) {
        !            59:                fprintf(stderr, "mkdir: cannot link %s\n", dname);
        !            60:                unlink(d);
        !            61:                ++Errors;
        !            62:                return;
        !            63:        }
        !            64:        strcat(dname, ".");
        !            65:        if((link(pname, dname)) < 0) {
        !            66:                fprintf(stderr, "mkdir: cannot link %s\n",dname);
        !            67:                dname[strlen(dname)] = '\0';
        !            68:                unlink(dname);
        !            69:                unlink(d);
        !            70:                ++Errors;
        !            71:        }
        !            72: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.