local.c.ed - vx32 - Local 9vx git repository for patches.
(HTM) git clone git://r-36.net/vx32
(DIR) Log
(DIR) Files
(DIR) Refs
---
local.c.ed (1224B)
---
1 /^connectlocalkfs/+/^$/i
2 char buf[512];
3 char *argv0;
4 char *cmd = "/boot/bzfs";
5 .
6 /stat/;/^$/ d
7 /dirfstat/ i
8 /* can do the check in 9vx -- kfs is kfs */
9 memset(buf, 0, sizeof buf);
10 pread(fd, buf, 512, 0);
11 if(memcmp(buf+256, "kfs wren device\n", 16) == 0)
12 cmd = "/boot/kfs";
13 else{
14 /* if an iso image, use 9660srv */
15 pread(fd, buf, 512, 17*0x800);
16 if(memcmp(buf, "\0CD001", 6) == 0)
17 cmd = "/boot/9660srv";
18 }
19 /* argv0 is basename(cmd) */
20 argv0 = strrchr(cmd, '/') + 1;
21 if(stat(cmd, statbuf, sizeof statbuf) < 0)
22 return -1;
23
24 .
25 /print\("kfs\.\.\."\)/ s/"kfs\.\.\."/"%s...", argv0/
26 /"kfs"/ s/"kfs"/argv0/
27 /exec/ s;"/boot/kfs";cmd;g
28 g/fatal\(.*kfs.*\)/ s/ (for )?kfs//
29 /fatal\("open \/net\/ipifc\/clone for loopback"\)/s,[^ ],// &,
30 a
31 return;
32 .
33 /^connectlocal\(void\)/-1i
34 int
35 connectlocalroot(void)
36 {
37 int fd;
38 char buf[1024];
39
40 snprint(buf, sizeof buf, "%s/%s/bin/rc", disk, cputype);
41 if(stat(buf, statbuf, sizeof statbuf) < 0)
42 return -1;
43 localroot = disk;
44
45 /* create working fd for /srv/boot */
46 fd = open("#~/mntloop", ORDWR);
47 if(fd < 0){
48 print("open #~/mntloop: %r\n");
49 return -1;
50 }
51 write(fd, disk, strlen(disk));
52 return fd;
53 }
54
55 .
56 /fd = connectlocal/i
57 if((fd = connectlocalroot()) < 0)
58 .