|
|
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.