|
|
1.1 root 1: #include <sys/types.h>
2: #include <sys/stat.h>
3:
4: /* lnall-
5: * son of mvall, son of cpall, son of ...
6: */
7:
8: char buf[100];
9:
10: main(argc, argv)
11: char **argv;
12: {
13: register char *c1, *c2, *cp;
14: int i;
15:
16: if(argc < 3) {
17: write(2, "arg count\n", 10);
18: exit();
19: }
20: argc--;
21: if (!dir(argv[argc]))
22: {
23: printf("%s: not a directory\n", argv[argc]);
24: exit(1);
25: }
26: c1 = buf;
27: c2 = argv[argc];
28: while(*c1++ = *c2++);
29: c1[-1] = '/';
30: for(i=1; i<argc; i++)
31: {
32: c2 = c1;
33: cp = (char *) actual(argv[i]);
34: while (*c2++ = *cp++);
35: if (link(argv[i],buf)) perror(argv[i]);
36: }
37: }
38:
39: dir(n)
40: char *n;
41: {
42: struct stat statbuf;
43: if (stat(n,&statbuf)) return(0);
44: return((statbuf.st_mode & 060000) == 040000);
45: }
46:
47: actual(str)
48: char *str;
49: {
50: register char *f;
51: register slash;
52: f = str;
53: slash = 0;
54: while (*f) if (*f++ == '/') slash++;
55: if (!slash) return(str);
56: while (*f != '/') --f;
57: ++f;
58: return(f);
59: }
60:
61:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.