home *** CD-ROM | disk | FTP | other *** search
- /*
- ** make directory
- */
-
- #include <signal.h>
- #include <stdio.h>
-
- int Errors = 0;
- char *strcat();
- char *strcpy();
-
- main(argc, argv)
- char *argv[];
- {
-
- signal(SIGHUP, SIG_IGN);
- signal(SIGINT, SIG_IGN);
- signal(SIGQUIT, SIG_IGN);
- signal(SIGPIPE, SIG_IGN);
- signal(SIGTERM, SIG_IGN);
-
- if(argc < 2) {
- fprintf(stderr, "mkdir: arg count\n");
- exit(1);
- }
- while(--argc)
- mkdir(*++argv);
- exit(Errors!=0);
- }
-
- mkdir(d)
- char *d;
- {
- char pname[128], dname[128];
- register i, slash = 0;
-
- pname[0] = '\0';
- for(i = 0; d[i]; ++i)
- if(d[i] == '/')
- slash = i + 1;
- if(slash)
- strncpy(pname, d, slash);
- strcpy(pname+slash, ".");
- if (access(pname, 02)) {
- fprintf(stderr,"mkdir: cannot access %s\n", pname);
- ++Errors;
- return;
- }
- if ((mknod(d, 040777, 0)) < 0) {
- fprintf(stderr,"mkdir: cannot make directory %s\n", d);
- ++Errors;
- return;
- }
- chown(d, getuid(), getgid());
- strcpy(dname, d);
- strcat(dname, "/.");
- if((link(d, dname)) < 0) {
- fprintf(stderr, "mkdir: cannot link %s\n", dname);
- unlink(d);
- ++Errors;
- return;
- }
- strcat(dname, ".");
- if((link(pname, dname)) < 0) {
- fprintf(stderr, "mkdir: cannot link %s\n",dname);
- dname[strlen(dname)] = '\0';
- unlink(dname);
- unlink(d);
- ++Errors;
- }
- }
-