1 static char *sccsid = "@(#)mkdir.c 4.1 (Berkeley) 10/01/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 } 73