|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.