Annotation of 40BSD/cmd/mkdir.c, revision 1.1.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.