## diffname boot/boot.c 1992/0317 ## diff -e /dev/null /n/bootesdump/1992/0317/sys/src/9/boot/boot.c 0a #include #include #include #include "../port/bootp.h" #include "../port/arp.h" #define DEFSYS "bootes" typedef struct Net Net; typedef struct Flavor Flavor; enum { Nterm = 4, CtrlD = 4, Cr = 13, View = 0x80, }; Fcall hdr; int printcol; char cputype[NAMELEN]; char terminal[NAMELEN]; char sys[2*NAMELEN]; char username[NAMELEN]; int mflag; int fflag; int kflag; void nop(int); void session(int); int cache(int); void swapproc(void); void settime(int); Method *rootserver(char*); void main(int argc, char *argv) { int fd; Method *mp; char cmd[64]; char flags[5]; int islocal; sleep(1000); open("#c/cons", OREAD); open("#c/cons", OWRITE); open("#c/cons", OWRITE); ARGBEGIN{ case 'u': strcpy(username, ARGF()); break; case 'k': kflag = 1; break; case 'm': mflag = 1; break; case 'f': fflag = 1; break; }ARGEND readenv("cputype", cputype, sizeof(cputype)); readenv("terminal", terminal, sizeof(cputype)); /* * pick a method and initialize it */ mp = rootserver(*argv); islocal = strcmp(mp->name, "local") == 0; (*mp->config)(mp); /* * get/set key or password */ (*pword)(mp); /* * connect to the root file system */ fd = (*mp->connect)(); if(fd < 0) fatal("can't connect to file server"); if(!islocal){ nop(fd); session(fd); fd = cache(fd); srvcreate(sys, fd); } srvcreate("boot", fd); /* * create the name space, mount the root fs */ if(bind("/", "/", MREPL) < 0) fatal("bind"); if(mount(fd, "/", MAFTER|MCREATE, "", "") < 0) fatal("mount"); close(fd); /* * start local fs if its not the root file server */ if(!islocal){ for(mp = method; mp->name; mp++) if(strcmp(mp->name, "local")==0){ local = (*mp->connect)(mp); if(local < 0) break; if(mount(local, "/n/kfs", MAFTER|MCREATE, "", "") < 0) fatal("mount"); close(local); break; } } settime(islocal); swapproc(); sleep(1000); sprint(cmd, "/%s/init", cputype); sprint(flags, "-%s%s", cpuflag ? "c" : "t", mflag ? "m", ""); execl(cmd, "init", flags, 0); fatal(cmd); } /* * ask user from whence comes the root file system */ Method* rootserver(char *arg) { char prompt[256]; char reply[64]; Method *mp; char *cp; int n; mp = method; n = 0; sprint(prompt, "root is from (", mp->name); for(mp++; mp->name; mp++) n += sprint(prompt+n, ", %s", mp->name); sprint(prompt+n, ")"); for(;;){ strcpy(reply, method->name); if(arg == 0) outin(prompt, reply, sizeof(reply)); else strcpy(reply, arg); arg = 0; for(mp = method; mp->name; mp++) if(*reply == *mp->name){ cp = strchr(reply, '!'); if(cp) strcpy(sys, cp+1); return mp; } if(mp->name == 0) continue; } } void nop(int fd) { long n; print("nop..."); hdr.type = Tnop; hdr.tag = NOTAG; n = convS2M(&hdr, buf); if(write(fd, buf, n) != n) fatal("write nop"); n = read(fd, buf, sizeof buf); if(n==2 && buf[0]=='O' && buf[1]=='K') n = read(fd, buf, sizeof buf); if(n <= 0) fatal("read nop"); if(convM2S(buf, &hdr, n) == 0) { print("n = %d; buf = %#.2x %#.2x %#.2x %#.2x\n", n, buf[0], buf[1], buf[2], buf[3]); fatal("format nop"); } if(hdr.type != Rnop) fatal("not Rnop"); } void session(int fd) { long n; print("session..."); hdr.type = Tsession; hdr.tag = NOTAG; n = convS2M(&hdr, buf); if(write(fd, buf, n) != n) fatal("write session"); n = read(fd, buf, sizeof buf); if(n <= 0) fatal("read session"); if(convM2S(buf, &hdr, n) == 0) fatal("format session"); if(hdr.type == Rerror){ print("error %s;", hdr.ename); fatal(hdr.ename); } if(hdr.type != Rsession) fatal("not Rsession"); } int cache(int fd) { ulong i; int p[2]; char d[DIRLEN]; char partition[2*NAMELEN]; if(stat("/cfs", d) < 0) return fd; sprint(partition, "%scache", bootdisk); if(stat(partition, d) < 0) return fd; print("cfs..."); if(pipe(p)<0) fatal("pipe"); switch(fork()){ case -1: fatal("fork"); case 0: close(p[1]); dup(fd, 0); close(fd); dup(p[0], 1); close(p[0]); if(format) execl("/cfs", "bootcfs", "-fs", "-p", partition, 0); else execl("/cfs", "bootcfs", "-s", "-p", partition, 0); break; default: close(p[0]); close(fd); fd = p[1]; break; } return fd; } void swapproc(void) { int fd; fd = open("#c/swap", OWRITE); if(fd < 0){ warning("opening #c/swap"); return; } if(write(fd, "start", 5) <= 0) warning("starting swap kproc"); } void settime(int islocal) { int n, f; int timeset; Dir dir; char dirbuf[DIRLEN]; char *srvname; print("time..."); timeset = 0; if(islocal){ /* * set the time from the real time clock */ f = open("#r/rtc", ORDWR); if(f >= 0){ if((n = read(f, dirbuf, sizeof(dirbuf)-1)) > 0){ dirbuf[n] = 0; timeset = 1; } close(f); } } if(timeset == 0){ /* * set the time from the access time of the root */ f = open("#s/boot", ORDWR); if(f < 0) return; if(mount(f, "/n/boot", MREPL, "", "") < 0){ close(f); return; } close(f); if(stat("/n/boot", dirbuf) < 0) fatal("stat"); convM2D(dirbuf, &dir); sprint(dirbuf, "%ld", dir.atime); unmount(0, "/n/boot"); /* * set real time clock if there is one */ f = open("#r/rtc", ORDWR); if(f > 0){ write(f, dirbuf, strlen(dirbuf)); close(f); } close(f); } f = open("#c/time", OWRITE); write(f, dirbuf, strlen(dirbuf)); close(f); } . ## diffname boot/boot.c 1992/0318 ## diff -e /n/bootesdump/1992/0317/sys/src/9/boot/boot.c /n/bootesdump/1992/0318/sys/src/9/boot/boot.c 270,326d 171,258d 155,156d 153c for(;;){ if(arg == 0 || mflag) . 151c if(arg) strcpy(reply, arg); else . 145,146c n = sprint(prompt, "root is from (%s", mp->name); . 133c * ask user from whence cometh the root file system . 127c sprint(flags, "-%s%s", cpuflag ? "c" : "t", mflag ? "m" : ""); . 117c close(fd); . 115c if(mount(fd, "/n/kfs", MAFTER|MCREATE, "", "") < 0) . 112,113c (*mp->config)(mp); fd = (*mp->connect)(); if(fd < 0) . 107c * if a local file server exists and it's not the * root file server, start it and mount it onto /n/kfs . 92c if(cfs) fd = (*cfs)(fd); . 81c (*pword)(islocal, mp); . 76a islocal = strcmp(mp->name, "local") == 0; . 74,75c mp = rootserver(argc ? *argv : 0); . 44c char flags[6]; . 39c main(int argc, char *argv[]) . 35d 31,32d 11,19d 3,5c #include "../boot/boot.h" . ## diffname boot/boot.c 1992/0319 ## diff -e /n/bootesdump/1992/0318/sys/src/9/boot/boot.c /n/bootesdump/1992/0319/sys/src/9/boot/boot.c 114d ## diffname boot/boot.c 1992/0320 ## diff -e /n/bootesdump/1992/0319/sys/src/9/boot/boot.c /n/bootesdump/1992/0320/sys/src/9/boot/boot.c 91a newkernel(); . ## diffname boot/boot.c 1992/0321 ## diff -e /n/bootesdump/1992/0320/sys/src/9/boot/boot.c /n/bootesdump/1992/0321/sys/src/9/boot/boot.c 80d ## diffname boot/boot.c 1992/0322 ## diff -e /n/bootesdump/1992/0321/sys/src/9/boot/boot.c /n/bootesdump/1992/0322/sys/src/9/boot/boot.c 145d 142,143c for(notfirst = 0;; notfirst = 1){ if(mflag || notfirst) . 130a int notfirst; . 115c sprint(flags, "-%s%s%s", cpuflag ? "c" : "t", mflag ? "m" : "", aflag ? "a" : ""); . 39a case 'a': aflag = 1; break; . 18a int aflag; . ## diffname boot/boot.c 1992/0323 ## diff -e /n/bootesdump/1992/0322/sys/src/9/boot/boot.c /n/bootesdump/1992/0323/sys/src/9/boot/boot.c 148c if(pflag || notfirst) . 92c if(mount(fd, "/", MAFTER|MCREATE, "", sauth) < 0) . 52a case 'p': pflag = 1; break; . 50a pflag = 1; . 19a int pflag; . 14a char *sauth = ""; . ## diffname boot/boot.c 1992/0325 ## diff -e /n/bootesdump/1992/0323/sys/src/9/boot/boot.c /n/bootesdump/1992/0325/sys/src/9/boot/boot.c 98,99c sauth = ""; if(mount(fd, "/", MAFTER|MCREATE, "", sauth) < 0){ sauth = "any"; if(mount(fd, "/", MAFTER|MCREATE, "", sauth) < 0) fatal("mount"); } . 15c char *sauth; . ## diffname boot/boot.c 1992/0327 ## diff -e /n/bootesdump/1992/0325/sys/src/9/boot/boot.c /n/bootesdump/1992/0327/sys/src/9/boot/boot.c 119c print("failed to mount kfs\n"); . ## diffname boot/boot.c 1992/0520 ## diff -e /n/bootesdump/1992/0327/sys/src/9/boot/boot.c /n/bootesdump/1992/0520/sys/src/9/boot/boot.c 169a return 0; /* not reached */ . ## diffname boot/boot.c 1992/0522 ## diff -e /n/bootesdump/1992/0520/sys/src/9/boot/boot.c /n/bootesdump/1992/0522/sys/src/9/boot/boot.c 28c boot(int argc, char *argv[]) . 15a char bootfile[3*NAMELEN]; . ## diffname boot/boot.c 1992/0530 ## diff -e /n/bootesdump/1992/0522/sys/src/9/boot/boot.c /n/bootesdump/1992/0530/sys/src/9/boot/boot.c 174c static void . 66a getconffile(conffile, terminal); . 24,26c static void swapproc(void); static Method *rootserver(char*); . 16a char conffile[NAMELEN]; . ## diffname boot/boot.c 1992/0609 ## diff -e /n/bootesdump/1992/0530/sys/src/9/boot/boot.c /n/bootesdump/1992/0609/sys/src/9/boot/boot.c 107c if(cpuflag == 0) newkernel(); . ## diffname boot/boot.c 1992/0610 ## diff -e /n/bootesdump/1992/0609/sys/src/9/boot/boot.c /n/bootesdump/1992/0610/sys/src/9/boot/boot.c 65,66c readfile("#e/cputype", cputype, sizeof(cputype)); readfile("#e/terminal", terminal, sizeof(cputype)); . 42a /* for(fd = 0; fd < argc; fd++) print("%s ", argv[fd]); print("\n");/**/ . ## diffname boot/boot.c 1992/0611 ## diff -e /n/bootesdump/1992/0610/sys/src/9/boot/boot.c /n/bootesdump/1992/0611/sys/src/9/boot/boot.c 118,129c for(mp = method; mp->name; mp++){ if(strcmp(mp->name, "local") != 0) continue; if(access("#s/kfs", ORDWR) >= 0) break; (*mp->config)(mp); fd = (*mp->connect)(); if(fd < 0) break; if(mount(fd, "/n/kfs", MAFTER|MCREATE, "", "") < 0) print("failed to mount kfs\n"); close(fd); break; . 115,116c * if a local file server exists and it's not * running, start it and mount it onto /n/kfs . ## diffname boot/boot.c 1992/0725 ## diff -e /n/bootesdump/1992/0611/sys/src/9/boot/boot.c /n/bootesdump/1992/0725/sys/src/9/boot/boot.c 42d ## diffname boot/boot.c 1992/0813 ## diff -e /n/bootesdump/1992/0725/sys/src/9/boot/boot.c /n/bootesdump/1992/0813/sys/src/9/boot/boot.c 42c /**/ print("argc=%d\n", argc); for(fd = 0; fd < argc; fd++) . ## diffname boot/boot.c 1992/0814 ## diff -e /n/bootesdump/1992/0813/sys/src/9/boot/boot.c /n/bootesdump/1992/0814/sys/src/9/boot/boot.c 42c /* print("argc=%d\n", argc); . ## diffname boot/boot.c 1992/0902 ## diff -e /n/bootesdump/1992/0814/sys/src/9/boot/boot.c /n/bootesdump/1992/0902/sys/src/9/boot/boot.c 123,130c } . 118,121c if(!islocal){ for(mp = method; mp->name; mp++){ if(strcmp(mp->name, "local") != 0) continue; (*mp->config)(mp); fd = (*mp->connect)(); if(fd < 0) break; mount(fd, "/n/kfs", MAFTER|MCREATE, "", "") ; close(fd); . ## diffname boot/boot.c 1992/0909 ## diff -e /n/bootesdump/1992/0902/sys/src/9/boot/boot.c /n/bootesdump/1992/0909/sys/src/9/boot/boot.c 118c if(!islocal && !ishybrid){ . 91c if(!islocal && !ishybrid){ . 78a ishybrid = strcmp(mp->name, "hybrid") == 0; . 35c int islocal, ishybrid; . ## diffname boot/boot.c 1992/0918 ## diff -e /n/bootesdump/1992/0909/sys/src/9/boot/boot.c /n/bootesdump/1992/0918/sys/src/9/boot/boot.c 169,170c if(strncmp(reply, mp->name, j) == 0){ . 167a cp = strchr(reply, '!'); if(cp) j = cp - reply; else j = strlen(reply); . 152c int n, j; . ## diffname boot/boot.c 1992/1006 ## diff -e /n/bootesdump/1992/0918/sys/src/9/boot/boot.c /n/bootesdump/1992/1006/sys/src/9/boot/boot.c 119c if(access("#s/kfs", 0) < 0){ . ## diffname boot/boot.c 1992/1021 ## diff -e /n/bootesdump/1992/1006/sys/src/9/boot/boot.c /n/bootesdump/1992/1021/sys/src/9/boot/boot.c 46a if(argc <= 1) pflag = 1; . ## diffname boot/boot.c 1993/0330 ## diff -e /n/bootesdump/1992/1021/sys/src/9/boot/boot.c /n/bootesdump/1993/0330/sys/src/9/boot/boot.c 137a remove("#e/password"); . 136a close(afd); . 130c mount(fd, "/n/kfs", MAFTER|MCREATE, "") ; . 108,113c if(mount(fd, "/", MAFTER|MCREATE, "") < 0) fatal("mount"); . 99a doauthenticate(fd, mp); . 97d 23a int afd = -1; . 15d 2a #include . ## diffname boot/boot.c 1993/0402 ## diff -e /n/bootesdump/1993/0330/sys/src/9/boot/boot.c /n/bootesdump/1993/0402/sys/src/9/boot/boot.c 97d ## diffname boot/boot.c 1993/0501 ## diff -e /n/bootesdump/1993/0402/sys/src/9/boot/boot.c /n/fornaxdump/1993/0501/sys/src/brazil/boot/boot.c 197a close(fd); } void reattach(int rec, Method *amp, char *buf) { char *mp; int fd, n, sv[2]; char tmp[64], *p; mp = strchr(buf, ' '); if(mp == 0) goto fail; *mp++ = '\0'; p = strrchr(buf, '/'); if(p == 0) goto fail; *p = '\0'; sprint(tmp, "%s/remote", buf); fd = open(tmp, OREAD); if(fd < 0) goto fail; n = read(fd, tmp, sizeof(tmp)); if(n < 0) goto fail; close(fd); tmp[n-1] = '\0'; print("boot: Service %s down, wait...\n", tmp); p = strrchr(buf, '/'); if(p == 0) goto fail; *p = '\0'; while(plumb(buf, tmp, sv, 0) < 0) sleep(30); nop(sv[1]); doauthenticate(sv[1], amp); print("boot: Service %s Ok\n", tmp); n = sprint(tmp, "%d %s", sv[1], mp); if(write(rec, tmp, n) < 0) { errstr(tmp); print("write recover: %s\n", tmp); } exits(0); fail: print("recover fail: %s\n", buf); exits(0); } void recover(Method *mp) { int fd, n; char buf[256]; fd = open("#/./recover", ORDWR); if(fd < 0) exits(0); for(;;) { n = read(fd, buf, sizeof(buf)); if(n < 0) exits(0); buf[n] = '\0'; if(fork() == 0) reattach(fd, mp, buf); } . 185a int nop(int fd) { int n; Fcall hdr; char buf[128]; print("boot: nop..."); hdr.type = Tnop; hdr.tag = NOTAG; n = convS2M(&hdr, buf); if(write(fd, buf, n) != n){ fatal("write nop"); return 0; } reread: n = read(fd, buf, sizeof buf); if(n <= 0){ fatal("read nop"); return 0; } if(n == 2) goto reread; if(convM2S(buf, &hdr, n) == 0) { fatal("format nop"); return 0; } if(hdr.type != Rnop){ fatal("not Rnop"); return 0; } if(hdr.tag != NOTAG){ fatal("tag not NOTAG"); return 0; } return 1; } . 135d 95a nop(fd); . 89a switch(rfork(RFPROC|RFNAMEG|RFFDG)) { case -1: print("failed to start recover: %r\n"); break; case 0: recover(mp); break; } . 26a static void recover(Method*); . 18,25c int printcol; int mflag; int fflag; int kflag; int aflag; int pflag; int afd = -1; . 10,11d 6d 3a #include . ## diffname boot/boot.c 1993/0525 ## diff -e /n/fornaxdump/1993/0501/sys/src/brazil/boot/boot.c /n/fornaxdump/1993/0525/sys/src/brazil/boot/boot.c 44a ethertest(); . 41c print("argc=%d\n", argc); . 27a ethertest(void) { int cf, df, n, t; char buf[64]; struct Etherpkt { uchar d[6]; uchar s[6]; uchar type[2]; } p; cf = open("#l/ether/clone", ORDWR); if(cf < 0){ print("can't open #l/ether/clone: %r\n"); exits(0); } n = read(cf, buf, 12); if(n < 0){ print("can't read #l/ether/clone: %r\n"); exits(0); } buf[n] = 0; sprint(buf, "#l/ether/%d/data", atoi(buf)); df = open(buf, ORDWR); if(df < 0){ print("can't open %s: %r\n", buf); exits(0); } if(write(cf, "connect -1", sizeof("connect -1")-1) < 0){ print("can't connect -1: %r\n"); exits(0); } close(cf); for(;;){ n = read(df, &p, sizeof(p)); if(n <= 0){ print("read returns %d: %r\n", n); continue; } t = (p.type[0]<<8) | p.type[1]; print("%d %2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux -> %2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux %ux\n", n, p.s[0], p.s[1], p.s[2], p.s[3], p.s[4], p.s[5], p.d[0], p.d[1], p.d[2], p.d[3], p.d[4], p.d[5], t); } } void . ## diffname boot/boot.c 1993/0528 ## diff -e /n/fornaxdump/1993/0525/sys/src/brazil/boot/boot.c /n/fornaxdump/1993/0528/sys/src/brazil/boot/boot.c 90a pipetest(); pipetest2(); . 89c print("\n"); #endif DEBUG . 85a #ifdef DEBUG . 69a close(df); . 61c for(i=0;i<20;i++){ . 30c int cf, df, n, t, i; . 27a pipetest(void) { int i, n, p[2]; ulong buf[1]; if(bind("#c", "/dev", MREPL) < 0) print("can't bind #c\n"); if(pipe(p) < 0){ print("pipe fails\n"); exits(0); } switch(fork()){ case -1: print("fork fails\n"); exits(0); case 0: close(p[0]); for(;;){ n = read(p[1], buf, 1); if(n <= 0){ print("1 exiting %d\n", time(0)); exits(0); } write(p[1], buf, 1); } default: close(p[1]); print("start %d\n", time(0)); for(i = 0; i < 100000; i++){ if(write(p[0], buf, 1) != 1){ print("sndr broke\n"); exits(0); } n = read(p[0], buf, 1); if(n <= 0){ print("0 exiting %d\n", time(0)); exits(0); } } close(p[0]); sleep(1000); } } void pipetest2(void) { int i, n, p[2]; uchar buf[4096]; if(bind("#c", "/dev", MREPL) < 0) print("can't bind #c\n"); if(pipe(p) < 0){ print("pipe fails\n"); exits(0); } switch(fork()){ case -1: print("fork fails\n"); exits(0); case 0: close(p[0]); for(;;){ n = read(p[1], buf, sizeof(buf)); if(n <= 0){ print("1 exiting %d\n", time(0)); exits(0); } } default: close(p[1]); print("start %d\n", time(0)); for(i = 0; i < 40000; i++){ if(write(p[0], buf, sizeof(buf)) != sizeof(buf)){ print("sndr broke\n"); exits(0); } } close(p[0]); sleep(1000); } } void . ## diffname boot/boot.c 1993/0601 ## diff -e /n/fornaxdump/1993/0528/sys/src/brazil/boot/boot.c /n/fornaxdump/1993/0601/sys/src/brazil/boot/boot.c 180a intest(); . 27a intest(void) { int n; char buf[128]; print(">"); n = read(0, buf, sizeof(buf)-1); print("read %d bytes\n", n); write(1, buf, n); } void . ## diffname boot/boot.c 1993/0724 ## diff -e /n/fornaxdump/1993/0601/sys/src/brazil/boot/boot.c /n/fornaxdump/1993/0724/sys/src/brazil/boot/boot.c 192,196d 28,172d ## diffname boot/boot.c 1994/0219 ## diff -e /n/fornaxdump/1993/0724/sys/src/brazil/boot/boot.c /n/fornaxdump/1994/0219/sys/src/brazil/boot/boot.c 171,174c strcpy(reply, method->name); if(arg){ j = strlen(arg); for(mp = method; mp->name; mp++) if(strncmp(arg, mp->name, j) == 0) break; if(mp->name) strcpy(reply, arg); } . ## diffname boot/boot.c 1994/0311 ## diff -e /n/fornaxdump/1994/0219/sys/src/brazil/boot/boot.c /n/fornaxdump/1994/0311/sys/src/brazil/boot/boot.c 197a . 195,196c cp = strchr(reply, '!'); if(cp) strcpy(sys, cp+1); return mp; } . 184,193c mp = findmethod(reply); if(mp){ for(cp = reply; *cp; cp++){ while(*cp && *cp != ' ') cp++; while(*cp == ' ') *cp++ = 0; if(*cp) bargv[bargc++] = cp; . 180a /* parse replies */ . 179a if(reply[0] == 0) strcpy(reply, method->name); . 171,178c /* create default reply */ readfile("#e/bootargs", reply, sizeof(reply)); if(reply[0] == 0 && arg != 0) strcpy(reply, arg); if(reply[0]){ mp = findmethod(reply); if(mp == 0) reply[0] = 0; . 164a /* make list of methods */ . 162c int n; . 159d 151a Method* findmethod(char *a) { Method *mp; int i, j; char *cp; i = strlen(a); cp = strchr(a, '!'); if(cp) i = cp - a; for(mp = method; mp->name; mp++){ j = strlen(mp->name); if(j > i) j = i; if(strncmp(a, mp->name, j) == 0) break; } if(mp->name) return mp; return 0; } . 40a bind("#c", "/dev", MAFTER); . 25a char *bargv[6]; int bargc; . 15a char reply[64]; . ## diffname boot/boot.c 1994/0317 ## diff -e /n/fornaxdump/1994/0311/sys/src/brazil/boot/boot.c /n/fornaxdump/1994/0317/sys/src/brazil/boot/boot.c 216c for(cp = reply; bargc < Nbarg-1 && *cp; cp++){ . 27,28d 23a char *bargv[Nbarg]; int bargc; . 16c char reply[256]; . ## diffname boot/boot.c 1994/0713 ## diff -e /n/fornaxdump/1994/0317/sys/src/brazil/boot/boot.c /n/fornaxdump/1994/0713/sys/src/brazil/boot/boot.c 224c bargv[bargc++] = cp++; . 218c for(cp = reply; bargc < Nbarg-1 && *cp;){ . ## diffname boot/boot.c 1994/0728 ## diff -e /n/fornaxdump/1994/0713/sys/src/brazil/boot/boot.c /n/fornaxdump/1994/0728/sys/src/brazil/boot/boot.c 50c print("%lux %s ", argv[fd], argv[fd]); . 46a . ## diffname boot/boot.c 1994/0829 ## diff -e /n/fornaxdump/1994/0728/sys/src/brazil/boot/boot.c /n/fornaxdump/1994/0829/sys/src/brazil/boot/boot.c 330c print("\nboot: Service %s Ok\n", tmp); . 317c print("boot: Service %s!%s down, wait...\n", buf, tmp); . ## diffname boot/boot.c 1994/1111 ## diff -e /n/fornaxdump/1994/0829/sys/src/brazil/boot/boot.c /n/fornaxdump/1994/1111/sys/src/brazil/boot/boot.c 128c if(cpuflag == 0 && nflag == 0) . 67a case 'n': nflag = 1; break; . 21a int nflag; . ## diffname boot/boot.c 1994/1212 ## diff -e /n/fornaxdump/1994/1111/sys/src/brazil/boot/boot.c /n/fornaxdump/1994/1212/sys/src/brazil/boot/boot.c 317a . 314a . 308a . ## diffname boot/boot.c 1995/02021 ## diff -e /n/fornaxdump/1994/1212/sys/src/brazil/boot/boot.c /n/fornaxdump/1995/02021/sys/src/brazil/boot/boot.c 218,220c for(;;){ outin(prompt, reply, sizeof(reply)); . 132,133d 76,78d 73d 69,71d 56,58d 22,23d ## diffname boot/boot.c 1995/0301 ## diff -e /n/fornaxdump/1995/02021/sys/src/brazil/boot/boot.c /n/fornaxdump/1995/0301/sys/src/brazil/boot/boot.c 182d 41a fmtinstall('r', rconv); . 30a static int rconv(void *o, Fconv *fp) { char s[ERRLEN]; USED(o); s[0] = 0; errstr(s); strconv(s, fp); return 0; } . ## diffname boot/boot.c 1995/1122 ## diff -e /n/fornaxdump/1995/0301/sys/src/brazil/boot/boot.c /n/fornaxdump/1995/1122/sys/src/brazil/boot/boot.c 349c static void . 190c static Method* . 60a bind("#e", "/env", MREPL|MCREATE); . ## diffname boot/boot.c 1996/0111 ## diff -e /n/fornaxdump/1995/1122/sys/src/brazil/boot/boot.c /n/fornaxdump/1996/0111/sys/src/brazil/boot/boot.c 156d 22d ## diffname boot/boot.c 1996/0214 ## diff -e /n/fornaxdump/1996/0111/sys/src/brazil/boot/boot.c /n/fornaxdump/1996/0214/sys/src/brazil/boot/boot.c 35c USED(arg); . 31c rconv(va_list *arg, Fconv *fp) . ## diffname boot/boot.c 1997/0327 ## diff -e /n/fornaxdump/1996/0214/sys/src/brazil/boot/boot.c /n/emeliedump/1997/0327/sys/src/brazil/boot/boot.c 221,228c bargc = parsefields(reply, bargv, Nbarg-1, " "); . 158c sprint(flags, "-%s%s", cpuflag ? "c" : "t", mflag ? "m" : ""); . 88,89d 70,72d 21d 14,15d 11d 7,9d ## diffname boot/boot.c 1997/0812 ## diff -e /n/emeliedump/1997/0327/sys/src/brazil/boot/boot.c /n/emeliedump/1997/0812/sys/src/brazil/boot/boot.c 121c fatal("mount /"); . 119c fatal("bind /"); . ## diffname boot/boot.c 1999/0316 ## diff -e /n/emeliedump/1997/0812/sys/src/brazil/boot/boot.c /n/emeliedump/1999/0316/sys/src/brazil/boot/boot.c 122a setenv("rootdir", rootdir); . 121a if(bind(rootdir, "/", MAFTER|MCREATE) < 0) fatal("bind /"); . 120c if(mount(fd, "/root", MREPL|MCREATE, "") < 0) . ## diffname boot/boot.c 2000/0308 ## diff -e /n/emeliedump/1999/0316/sys/src/brazil/boot/boot.c /n/emeliedump/2000/0308/sys/src/9/boot/boot.c 213c bargc = getfields(reply, bargv, Nbarg-1, 1, " "); . ## diffname boot/boot.c 2000/0310 ## diff -e /n/emeliedump/2000/0308/sys/src/9/boot/boot.c /n/emeliedump/2000/0310/sys/src/9/boot/boot.c 125,126c setenv("rootdir", rp); . 122,123c rp = getenv("rootdir"); if(rp == nil) rp = rootdir; if(strncmp(rp, "/root", 5) != 0){ snprint(rootbuf, sizeof rootbuf, "/root/%s", rp); rp = rootbuf; } if(bind(rp, "/", MAFTER|MCREATE) < 0) fatal("second bind /"); . 120c rp = getenv("rootspec"); if(rp == nil) rp = ""; if(mount(fd, "/root", MREPL|MCREATE, rp) < 0) . 43a char *rp; . 41a char rootbuf[64]; . ## diffname boot/boot.c 2000/0311 ## diff -e /n/emeliedump/2000/0310/sys/src/9/boot/boot.c /n/emeliedump/2000/0311/sys/src/9/boot/boot.c 134,135d 132a if(bind(rp, "/", MAFTER|MCREATE) < 0){ fprint(2, "boot: couldn't bind $rootdir=%s to root: %r\n", rp); fatal("second bind /"); } . 130c if(bind(rp, "/", MAFTER|MCREATE) < 0){ if(strncmp(rp, "/root", 5) == 0){ fprint(2, "boot: couldn't bind $rootdir=%s to root: %r\n", rp); fatal("second bind /"); } . ## diffname boot/boot.c 2000/0318 ## diff -e /n/emeliedump/2000/0311/sys/src/9/boot/boot.c /n/emeliedump/2000/0318/sys/src/9/boot/boot.c 139c if(strcmp(rootbuf, "/root//plan9") == 0){ fprint(2, "**** warning: remove rootdir=/plan9 entry from plan9.ini\n"); rp = "/root"; if(bind(rp, "/", MAFTER|MCREATE) < 0) fatal("second bind /"); }else fatal("second bind /"); . ## diffname boot/boot.c 2000/1019 ## diff -e /n/emeliedump/2000/0318/sys/src/9/boot/boot.c /n/emeliedump/2000/1019/sys/src/9/boot/boot.c 158a bargc = 1; . ## diffname boot/boot.c 2000/1107 ## diff -e /n/emeliedump/2000/1019/sys/src/9/boot/boot.c /n/emeliedump/2000/1107/sys/src/9/boot/boot.c 237c bargc = parsecmd(reply, bargv, Nbarg); . 201a int parsecmd(char *s, char **av, int n) { int ac; n--; for(ac = 0; ac < n; ac++){ while(*s == ' ' || *s == '\t') s++; if(*s == 0 || *s == '\n' || *s == '\r') break; if(*s == '\''){ s++; av[ac] = s; while(*s && *s != '\'') s++; } else { av[ac] = s; while(*s && *s != ' ' && *s != '\t') s++; } if(*s != 0) *s++ = 0; } av[ac] = 0; return ac; } . ## diffname boot/boot.c 2001/0217 ## diff -e /n/emeliedump/2000/1107/sys/src/9/boot/boot.c /n/emeliedump/2001/0217/sys/src/9/boot/boot.c 173,175c cmd = getenv("init"); if(cmd == nil){ sprint(cmdbuf, "/%s/init -%s%s", cputype, cpuflag ? "c" : "t", mflag ? "m" : ""); cmd = cmdbuf; } iargc = tokenize(cmd, iargv, nelem(iargv)-1); cmd = iargv[0]; /* make iargv[0] basename(iargv[0]) */ if(iargv[0] = strrchr(iargv[0], '/')) iargv[0]++; else iargv[0] = cmd; iargv[iargc] = nil; exec(cmd, iargv); . 44c int islocal, ishybrid, iargc; . 41c char *cmd, cmdbuf[64], *iargv[16]; . ## diffname boot/boot.c 2001/0301 ## diff -e /n/emeliedump/2001/0217/sys/src/9/boot/boot.c /n/emeliedump/2001/0301/sys/src/9/boot/boot.c 43d ## diffname boot/boot.c 2001/0527 ## diff -e /n/emeliedump/2001/0301/sys/src/9/boot/boot.c /n/emeliedump/2001/0527/sys/src/9/boot/boot.c 393,417c return p[1]; . 355,391c print("srvold9p..."); switch(fork()) { case -1: fatal("rfork srvold9p"); case 0: dup(fd, 1); close(fd); dup(p[0], 0); close(p[0]); close(p[1]); execl("/srvold9p", "srvold9p", "-s", 0); fatal("exec srvold9p"); default: close(fd); close(p[0]); . 350,353c if(pipe(p) < 0) fatal("pipe"); . 346,348c int p[2]; . 343,344c int old9p(int fd) . 290,327d 279c bargc = getfields(reply, bargv, Nbarg-1, 1, " "); . 216,243d 172,189c sprint(cmd, "/%s/ninit", cputype); sprint(flags, "-%s%s", cpuflag ? "c" : "t", mflag ? "m" : ""); execl(cmd, "init", flags, 0); . 158d 154c if(0 && access("#s/kfs", 0) < 0){ /* BUG: DISABLED UNTIL KFS SUPPORTS 9P2000 */ . 108c if(getenv("srvold9p")) fd = old9p(fd); print("version..."); buf[0] = '\0'; n = fversion(fd, 0, buf, sizeof buf); if(n < 0) fatal("can't init 9P"); print("(%.*s)", n, buf); . 93,101d 44a int n; char buf[32]; . 43c char flags[6]; int islocal, ishybrid; . 41c char cmd[64]; . 30,31c s[0] = '\0'; errstr(s, sizeof s); . 26c char s[ERRMAX]; . 20d 7,9c char cputype[64]; char sys[2*64]; . ## diffname boot/boot.c 2001/0607 ## diff -e /n/emeliedump/2001/0527/sys/src/9/boot/boot.c /n/emeliedump/2001/0607/sys/src/9/boot/boot.c 107c print("(%.*s)...", n, buf); . ## diffname boot/boot.c 2001/0807 ## diff -e /n/emeliedump/2001/0607/sys/src/9/boot/boot.c /n/emeliedump/2001/0807/sys/src/9/boot/boot.c 124a print("mount is done\n"); . 122a print("boot about to mount\n"); . ## diffname boot/boot.c 2001/0819 ## diff -e /n/emeliedump/2001/0807/sys/src/9/boot/boot.c /n/emeliedump/2001/0819/sys/src/9/boot/boot.c 169c settime(islocal, afd); . 163c mount(fd, -1, "/n/kfs", MAFTER|MCREATE, "") ; . 126d 123,124c afd = fauth(fd, rp); if(afd >= 0){ ai = auth_proxy(afd, "p9any", 0, auth_getkey); if(ai == nil) print("authentication failed (%r), trying mount anyways\n"); } if(mount(fd, afd, "/root", MREPL|MCREATE, rp) < 0) . 111d 92c authentication(cpuflag); . 90c * authentication agent . 65,67d 55a bind("#s", "/srv", MREPL|MCREATE); . 48a . 45a AuthInfo *ai; . 37c int fd, afd; . ## diffname boot/boot.c 2001/0820 ## diff -e /n/emeliedump/2001/0819/sys/src/9/boot/boot.c /n/emeliedump/2001/0820/sys/src/9/boot/boot.c 154,171d 107,111d 101a if(!islocal && !ishybrid){ if(cfs) fd = (*cfs)(fd); } . ## diffname boot/boot.c 2001/0911 ## diff -e /n/emeliedump/2001/0820/sys/src/9/boot/boot.c /n/emeliedump/2001/0911/sys/src/9/boot/boot.c 157,159c cmd = getenv("init"); if(cmd == nil){ sprint(cmdbuf, "/%s/ninit -%s%s", cputype, cpuflag ? "c" : "t", mflag ? "m" : ""); cmd = cmdbuf; } iargc = tokenize(cmd, iargv, nelem(iargv)-1); cmd = iargv[0]; /* make iargv[0] basename(iargv[0]) */ if(iargv[0] = strrchr(iargv[0], '/')) iargv[0]++; else iargv[0] = cmd; iargv[iargc] = nil; exec(cmd, iargv); . 44c int iargc, n; . 41d 39c char *cmd, cmdbuf[64], *iargv[16]; . ## diffname boot/boot.c 2001/1103 ## diff -e /n/emeliedump/2001/0911/sys/src/9/boot/boot.c /n/emeliedump/2001/1103/sys/src/9/boot/boot.c 158c sprint(cmdbuf, "/%s/init -%s%s", cputype, . ## diffname boot/boot.c 2001/1105 ## diff -e /n/emeliedump/2001/1103/sys/src/9/boot/boot.c /n/emeliedump/2001/1105/sys/src/9/boot/boot.c 123c ai = auth_proxy(afd, auth_getkey, "proto=p9any role=client"); . ## diffname boot/boot.c 2001/1117 ## diff -e /n/emeliedump/2001/1105/sys/src/9/boot/boot.c /n/emeliedump/2001/1117/sys/src/9/boot/boot.c 235c bargc = tokenize(reply, bargv, Nbarg-1); . ## diffname boot/boot.c 2002/0110 ## diff -e /n/emeliedump/2001/1117/sys/src/9/boot/boot.c /n/emeliedump/2002/0110/sys/src/9/boot/boot.c 56c /* * init will reinitialize its namespace. * #ec gets us plan9.ini settings. */ bind("#ec", "/env", MREPL|MCREATE); bind("#e", "/env", MAFTER); . 47,49d ## diffname boot/boot.c 2002/0217 ## diff -e /n/emeliedump/2002/0110/sys/src/9/boot/boot.c /n/emeliedump/2002/0217/sys/src/9/boot/boot.c 30,31c return fmtstrcpy(fp, s); . 26,27d 22c rconv(Fmt* fp) . ## diffname boot/boot.c 2002/0221 ## diff -e /n/emeliedump/2002/0217/sys/src/9/boot/boot.c /n/emeliedump/2002/0221/sys/src/9/boot/boot.c 44c fmtinstall('r', errfmt); . 21,30d ## diffname boot/boot.c 2002/0401 ## diff -e /n/emeliedump/2002/0221/sys/src/9/boot/boot.c /n/emeliedump/2002/0401/sys/src/9/boot/boot.c 223a HaveMethod: . 199a /* look for required reply */ readfile("#e/nobootprompt", reply, sizeof(reply)); if(reply[0]){ mp = findmethod(reply); if(mp) goto HaveMethod; print("boot method %s not found\n", reply); reply[0] = 0; } . ## diffname boot/boot.c 2002/0411 ## diff -e /n/emeliedump/2002/0401/sys/src/9/boot/boot.c /n/emeliedump/2002/0411/sys/src/9/boot/boot.c 235c bargc = tokenize(reply, bargv, Nbarg-2); bargv[bargc] = nil; . 231a if(strlen(reply) == 0) continue; . ## diffname boot/boot.c 2002/1002 ## diff -e /n/emeliedump/2002/0411/sys/src/9/boot/boot.c /n/emeliedump/2002/1002/sys/src/9/boot/boot.c 142c settime(islocal, afd, rsp); . 117a rsp = rp; . 29c char *rp, *rsp; .