BSD 3 development
[unix-history] / usr / src / cmd / lnall.c
#include <sys/types.h>
#include <sys/stat.h>
/* lnall-
* son of mvall, son of cpall, son of ...
*/
char buf[100];
main(argc, argv)
char **argv;
{
register char *c1, *c2, *cp;
int i;
if(argc < 3) {
write(2, "arg count\n", 10);
exit();
}
argc--;
if (!dir(argv[argc]))
{
printf("%s: not a directory\n", argv[argc]);
exit(1);
}
c1 = buf;
c2 = argv[argc];
while(*c1++ = *c2++);
c1[-1] = '/';
for(i=1; i<argc; i++)
{
c2 = c1;
cp = (char *) actual(argv[i]);
while (*c2++ = *cp++);
if (link(argv[i],buf)) perror(argv[i]);
}
}
dir(n)
char *n;
{
struct stat statbuf;
if (stat(n,&statbuf)) return(0);
return((statbuf.st_mode & 060000) == 040000);
}
actual(str)
char *str;
{
register char *f;
register slash;
f = str;
slash = 0;
while (*f) if (*f++ == '/') slash++;
if (!slash) return(str);
while (*f != '/') --f;
++f;
return(f);
}