BSD 4 release
[unix-history] / usr / src / cmd / mkdir.c
static char *sccsid = "@(#)mkdir.c 4.1 (Berkeley) 10/1/80";
/*
** 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;
}
}