xref: /original-bsd/bin/mkdir/mkdir.c (revision d25e1985)
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