|
|
1.1 ! root 1: #include <u.h> ! 2: #include <libc.h> ! 3: #include <../boot/boot.h> ! 4: ! 5: int ! 6: cache(int fd) ! 7: { ! 8: int i, p[2]; ! 9: char d[DIRLEN]; ! 10: char partition[2*NAMELEN]; ! 11: char bd[NAMELEN]; ! 12: ! 13: if(stat("/cfs", d) < 0) ! 14: return fd; ! 15: ! 16: readfile("#e/bootdisk", bd, sizeof(bd)); ! 17: if(*bd){ ! 18: /* damned artificial intelligence */ ! 19: i = strlen(bd); ! 20: if(strcmp("disk", &bd[i-4]) == 0) ! 21: bd[i-4] = 0; ! 22: else if(strcmp("fs", &bd[i-2]) == 0) ! 23: bd[i-2] = 0; ! 24: sprint(partition, "%scache", bd); ! 25: if(stat(partition, d) < 0) ! 26: *bd = 0; ! 27: } ! 28: if(*bd == 0){ ! 29: sprint(partition, "%scache", bootdisk); ! 30: if(stat(partition, d) < 0) ! 31: return fd; ! 32: } ! 33: print("cfs..."); ! 34: if(pipe(p)<0) ! 35: fatal("pipe"); ! 36: switch(fork()){ ! 37: case -1: ! 38: fatal("fork"); ! 39: case 0: ! 40: close(p[1]); ! 41: dup(fd, 0); ! 42: close(fd); ! 43: dup(p[0], 1); ! 44: close(p[0]); ! 45: if(fflag) ! 46: execl("/cfs", "bootcfs", "-rs", "-f", partition, 0); ! 47: else ! 48: execl("/cfs", "bootcfs", "-s", "-f", partition, 0); ! 49: break; ! 50: default: ! 51: close(p[0]); ! 52: close(fd); ! 53: fd = p[1]; ! 54: break; ! 55: } ! 56: return fd; ! 57: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.