home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / mkdir.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  1.2 KB  |  72 lines

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