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