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