## diffname port/devroot.c 1990/0227 ## diff -e /dev/null /n/bootesdump/1990/0227/sys/src/9/mips/devroot.c 0a #include "u.h" #include "lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "errno.h" #include "devtab.h" enum{ Qdir, Qbin, Qboot, Qdev, Qenv, Qproc, }; Dirtab rootdir[]={ "bin", Qbin|CHDIR, 0, 0700, "boot", Qboot, 0, 0700, "dev", Qdev|CHDIR, 0, 0700, "env", Qenv|CHDIR, 0, 0700, "proc", Qproc|CHDIR, 0, 0700, }; #define NROOT (sizeof rootdir/sizeof(Dirtab)) void rootreset(void) { } void rootinit(void) { } Chan* rootattach(char *spec) { return devattach('/', spec); } Chan* rootclone(Chan *c, Chan *nc) { return devclone(c, nc); } int rootwalk(Chan *c, char *name) { return devwalk(c, name, rootdir, NROOT, devgen); } void rootstat(Chan *c, char *dp) { devstat(c, dp, rootdir, NROOT, devgen); } Chan* rootopen(Chan *c, int omode) { return devopen(c, omode, rootdir, NROOT, devgen); } void rootcreate(Chan *c, char *name, int omode, ulong perm) { error(0, Eperm); } /* * sysremove() knows this is a nop */ void rootclose(Chan *c) { } #include "boot.h" long rootread(Chan *c, void *buf, long n) { switch(c->qid & ~CHDIR){ case Qdir: return devdirread(c, buf, n, rootdir, NROOT, devgen); case Qboot: /* boot */ if(c->offset >= sizeof bootcode) return 0; if(c->offset+n > sizeof bootcode) n = sizeof bootcode - c->offset; memcpy(buf, ((char*)bootcode)+c->offset, n); return n; case Qdev: return 0; } error(0, Egreg); return 0; } long rootwrite(Chan *c, void *buf, long n) { error(0, Egreg); } void rootremove(Chan *c) { error(0, Eperm); } void rootwstat(Chan *c, char *dp) { error(0, Eperm); } void rootuserstr(Error *e, char *buf) { consuserstr(e, buf); } #include "errstr.h" void rooterrstr(Error *e, char *buf) { if(e->code<0 || e->code>=sizeof errstrtab/sizeof(char*)) strcpy(buf, "no such error"); else strcpy(buf, errstrtab[e->code]); } . ## diffname port/devroot.c 1990/11211 ## diff -e /n/bootesdump/1990/0227/sys/src/9/mips/devroot.c /n/bootesdump/1990/11211/sys/src/9/mips/devroot.c 122,139c error(Eperm); . 116c error(Eperm); . 110c error(Egreg); . 103c error(Egreg); . 88c switch(c->qid.path & ~CHDIR){ . 71c error(Eperm); . 19,23c "bin", {Qbin|CHDIR}, 0, 0700, "boot", {Qboot}, 0, 0700, "dev", {Qdev|CHDIR}, 0, 0700, "env", {Qenv|CHDIR}, 0, 0700, "proc", {Qproc|CHDIR}, 0, 0700, . ## diffname port/devroot.c 1991/0110 ## diff -e /n/bootesdump/1990/1210/sys/src/9/mips/devroot.c /n/bootesdump/1991/0110/sys/src/9/port/devroot.c 97a ck("2"); . 96a ck("1"); . ## diffname port/devroot.c 1991/0111 ## diff -e /n/bootesdump/1991/0110/sys/src/9/port/devroot.c /n/bootesdump/1991/0111/sys/src/9/port/devroot.c 99d 97d ## diffname port/devroot.c 1991/0214 ## diff -e /n/bootesdump/1991/0111/sys/src/9/port/devroot.c /n/bootesdump/1991/0214/sys/src/9/port/devroot.c 97a return n; case Qcfs: /* boot */ if(c->offset >= cfslen) return 0; if(c->offset+n > cfslen) n = cfslen - c->offset; memcpy(buf, ((char*)cfscode)+c->offset, n); . 90c return devdirread(c, buf, n, rootdir, nroot, devgen); . 65c return devopen(c, omode, rootdir, nroot, devgen); . 59c devstat(c, dp, rootdir, nroot, devgen); . 53c return devwalk(c, name, rootdir, nroot, devgen); . 30a nroot = (cfslen > 0) ? NROOT : NROOT-1; . 26a int nroot; . 23a "cfs", {Qcfs}, 0, 0700, . 17a extern long cfslen; extern ulong *cfscode; . 12a Qcfs, . ## diffname port/devroot.c 1991/0216 ## diff -e /n/bootesdump/1991/0214/sys/src/9/port/devroot.c /n/bootesdump/1991/0216/sys/src/9/port/devroot.c 20c extern ulong cfscode[]; . ## diffname port/devroot.c 1991/0312 ## diff -e /n/bootesdump/1991/0216/sys/src/9/port/devroot.c /n/bootesdump/1991/0312/sys/src/9/port/devroot.c 108c case Qcfs: /* cfs */ . ## diffname port/devroot.c 1991/0318 ## diff -e /n/bootesdump/1991/0312/sys/src/9/port/devroot.c /n/bootesdump/1991/0318/sys/src/9/port/devroot.c 113c memmove(buf, ((char*)cfscode)+c->offset, n); . 105c memmove(buf, ((char*)bootcode)+c->offset, n); . ## diffname port/devroot.c 1991/0411 ## diff -e /n/bootesdump/1991/0318/sys/src/9/port/devroot.c /n/bootesdump/1991/0411/sys/src/9/port/devroot.c 124c rootwrite(Chan *c, void *buf, long n, ulong offset) . 111,113c if(offset+n > cfslen) n = cfslen - offset; memmove(buf, ((char*)cfscode)+offset, n); . 109c if(offset >= cfslen) . 103,105c if(offset+n > sizeof bootcode) n = sizeof bootcode - offset; memmove(buf, ((char*)bootcode)+offset, n); . 101c if(offset >= sizeof bootcode) . 93c rootread(Chan *c, void *buf, long n, ulong offset) . ## diffname port/devroot.c 1991/0419 ## diff -e /n/bootesdump/1991/0411/sys/src/9/port/devroot.c /n/bootesdump/1991/0419/sys/src/9/port/devroot.c 63a Chan* rootclwalk(Chan *c, char *name) { return devclwalk(c, name); } . ## diffname port/devroot.c 1991/0427 ## diff -e /n/bootesdump/1991/0419/sys/src/9/port/devroot.c /n/bootesdump/1991/0427/sys/src/9/port/devroot.c 64,69d ## diffname port/devroot.c 1991/0613 ## diff -e /n/bootesdump/1991/0427/sys/src/9/port/devroot.c /n/bootesdump/1991/0613/sys/src/9/port/devroot.c 113a return n; case Qcryptfs: /* cryptfs */ if(offset >= cryptfslen) return 0; if(offset+n > cryptfslen) n = cryptfslen - offset; memmove(buf, ((char*)cryptfscode)+offset, n); . 28a "cryptfs", {Qcryptfs}, 0, 0700, . 22a . 21a extern long cryptfslen; extern ulong cryptfscode[]; . 13a Qcryptfs, . ## diffname port/devroot.c 1991/0615 ## diff -e /n/bootesdump/1991/0613/sys/src/9/port/devroot.c /n/bootesdump/1991/0615/sys/src/9/port/devroot.c 103c return devdirread(c, buf, n, rootdir, nroot, rootgen); . 78c return devopen(c, omode, rootdir, nroot, rootgen); . 72c devstat(c, dp, rootdir, nroot, rootgen); . 66c return devwalk(c, name, rootdir, nroot, rootgen); . 43c int i; i = 0; if(cfslen) rootmap[i++] = &rootpdir[0]; if(cryptfslen) rootmap[i++] = &rootpdir[1]; nroot = NROOT + i; . 39a int rootgen(Chan *c, Dirtab *tab, int ntab, int i, Dir *dp) { if(tab==0 || i>=ntab) return -1; if(i < NROOT) tab += i; else tab = rootmap[i - NROOT]; devdir(c, tab->qid, tab->name, tab->length, tab->perm, dp); return 1; } . 37a Dirtab rootpdir[]={ "cfs", {Qcfs}, 0, 0700, "cryptfs", {Qcryptfs}, 0, 0700, }; Dirtab *rootmap[sizeof rootpdir/sizeof(Dirtab)]; . 36d 33,34d 26d 22d ## diffname port/devroot.c 1991/0910 ## diff -e /n/bootesdump/1991/0615/sys/src/9/port/devroot.c /n/bootesdump/1991/0910/sys/src/9/port/devroot.c 138a return n; case Qkfs: /* kfs */ if(offset >= kfslen) return 0; if(offset+n > kfslen) n = kfslen - offset; memmove(buf, ((char*)kfscode)+offset, n); . 62a if(kfslen) rootmap[i++] = &rootpdir[2]; . 35a "kfs", {Qkfs}, 0, 0700, . 21a extern long kfslen; extern ulong kfscode[]; . 16a Qkfs, . ## diffname port/devroot.c 1991/0913 ## diff -e /n/bootesdump/1991/0910/sys/src/9/port/devroot.c /n/bootesdump/1991/0913/sys/src/9/port/devroot.c 153,160d 68c rootmap[i++] = &rootpdir[1]; . 65,66d 38d 25,26d 14d ## diffname port/devroot.c 1991/1109 ## diff -e /n/bootesdump/1991/0913/sys/src/9/port/devroot.c /n/bootesdump/1991/1109/sys/src/9/port/devroot.c 49c devdir(c, tab->qid, tab->name, tab->length, eve, tab->perm, dp); . ## diffname port/devroot.c 1991/1112 ## diff -e /n/bootesdump/1991/1109/sys/src/9/port/devroot.c /n/bootesdump/1991/1112/sys/src/9/port/devroot.c 34,35c "cfs", {Qcfs}, 0, 0777, "kfs", {Qkfs}, 0, 0777, . 26,30c "bin", {Qbin|CHDIR}, 0, 0777, "boot", {Qboot}, 0, 0777, "dev", {Qdev|CHDIR}, 0, 0777, "env", {Qenv|CHDIR}, 0, 0777, "proc", {Qproc|CHDIR}, 0, 0777, . ## diffname port/devroot.c 1991/1115 ## diff -e /n/bootesdump/1991/1112/sys/src/9/port/devroot.c /n/bootesdump/1991/1115/sys/src/9/port/devroot.c 170a USED(c, dp); . 164a USED(c); . 158a USED(c, buf, n, offset); . 112a USED(c); . 103a USED(c, name, omode, perm); . ## diffname port/devroot.c 1991/1206 ## diff -e /n/bootesdump/1991/1115/sys/src/9/port/devroot.c /n/bootesdump/1991/1206/sys/src/9/port/devroot.c 130,131c if(offset+n > bootlen) n = bootlen - offset; . 128c if(offset >= bootlen) . 117,118d 85a if(strcmp(name, "..") == 0) { c->qid.path = Qdir|CHDIR; return 1; } . 23a extern ulong bootlen; extern ulong bootcode[]; . 17a Qboot, Qcfs, Qkfs, . 16d 12,13d ## diffname port/devroot.c 1992/0111 ## diff -e /n/bootesdump/1991/1206/sys/src/9/port/devroot.c /n/bootesdump/1992/0111/sys/src/9/port/devroot.c 6c #include "../port/error.h" . ## diffname port/devroot.c 1992/0213 ## diff -e /n/bootesdump/1992/0111/sys/src/9/port/devroot.c /n/bootesdump/1992/0213/sys/src/9/port/devroot.c 33a "net", {Qnet|CHDIR}, 0, 0777, . 14a Qnet, . ## diffname port/devroot.c 1992/0215 ## diff -e /n/bootesdump/1992/0213/sys/src/9/port/devroot.c /n/bootesdump/1992/0215/sys/src/9/port/devroot.c 161d ## diffname port/devroot.c 1992/0225 ## diff -e /n/bootesdump/1992/0215/sys/src/9/port/devroot.c /n/bootesdump/1992/0225/sys/src/9/port/devroot.c 94a if((c->qid.path & ~CHDIR) != Qdir) error(Enonexist); . 53a . 51c tab = &rootdir[i]; . 49a . 48c if(i >= nroot) . ## diffname port/devroot.c 1992/0226 ## diff -e /n/bootesdump/1992/0225/sys/src/9/port/devroot.c /n/bootesdump/1992/0226/sys/src/9/port/devroot.c 98c return 0; . ## diffname port/devroot.c 1992/0321 ## diff -e /n/bootesdump/1992/0226/sys/src/9/port/devroot.c /n/bootesdump/1992/0321/sys/src/9/port/devroot.c 2c #include "../port/lib.h" . ## diffname port/devroot.c 1992/0520 ## diff -e /n/bootesdump/1992/0321/sys/src/9/port/devroot.c /n/bootesdump/1992/0520/sys/src/9/port/devroot.c 172a return 0; /* not reached */ . ## diffname port/devroot.c 1992/0711 ## diff -e /n/bootesdump/1992/0520/sys/src/9/port/devroot.c /n/bootesdump/1992/0711/sys/src/9/port/devroot.c 47a USED(ntab); . ## diffname port/devroot.c 1992/0902 ## diff -e /n/bootesdump/1992/0711/sys/src/9/port/devroot.c /n/bootesdump/1992/0902/sys/src/9/port/devroot.c 159,161c if(offset+n > fslen) n = fslen - offset; memmove(buf, ((char*)fscode)+offset, n); . 156,157c case Qfs: /* fs */ if(offset >= fslen) . 145c memmove(buf, bootcode+offset, n); . 70c if(fslen) . 40c "fs", {Qfs}, 0, 0777, . 27c extern uchar bootcode[]; . 24,25c extern long fslen; extern ulong fscode[]; . 19c Qfs, . ## diffname port/devroot.c 1993/0501 ## diff -e /n/bootesdump/1992/0902/sys/src/9/port/devroot.c /n/fornaxdump/1993/0501/sys/src/brazil/port/devroot.c 189a } void rootrecover(Path *p, char *mntname) { int i; Recover *r; char buf[256]; r = malloc(sizeof(Recover)); i = ptpath(p, buf, sizeof(buf)); r->req = smalloc(i+strlen(mntname)+2); sprint(r->req, "%s %s", buf, mntname); lock(&reclist); r->next = reclist.q; reclist.q = r; unlock(&reclist); wakeup(&reclist); . 173,175c char tmp[256]; USED(offset); switch(c->qid.path & ~CHDIR){ default: error(Egreg); case Qrecover: if(n > sizeof(tmp)-1) error(Etoosmall); /* Nul terminate */ memmove(tmp, buf, n); tmp[n] = '\0'; mntrepl(tmp); return n; } return 0; . 163a case Qrecover: qlock(&reclist); if(waserror()) { qunlock(&reclist); nexterror(); } sleep(&reclist, rdrdy, 0); lock(&reclist); r = reclist.q; reclist.q = r->next; unlock(&reclist); qunlock(&reclist); poperror(); if(n < r->len) n = r->len; memmove(buf, r->req, n); free(r->req); free(r); return n; . 134a Recover *r; . 131a int rdrdy(void *a) { USED(a); return reclist.q != 0; } . 112a switch(c->qid.path & ~CHDIR) { default: break; case Qrecover: if(strcmp(up->user, eve) != 0) error(Eperm); break; } . 44a typedef struct Recover Recover; struct Recover { int len; char *req; Recover *next; }; struct { Lock; QLock; Rendez; Recover *q; }reclist; . 35a "recover", {Qrecover}, 0, 0777, . 15a Qrecover, . 9c enum { . ## diffname port/devroot.c 1993/0724 ## diff -e /n/fornaxdump/1993/0501/sys/src/brazil/port/devroot.c /n/fornaxdump/1993/0724/sys/src/brazil/port/devroot.c 226,227c d = &rootdir[t-1]; data = rootdata[t-1]; if(offset >= d->length) return 0; if(offset+n > d->length) n = d->length - offset; memmove(buf, data+offset, n); return n; . 224c if(t < Qboot) . 222a } . 174,199c return devdirread(c, buf, n, rootdir, nroot, devgen); . 172c t = c->qid.path & ~CHDIR; switch(t){ . 169a ulong t; Dirtab *d; uchar *data; . 141c return devopen(c, omode, rootdir, nroot, devgen); . 126c devstat(c, dp, rootdir, nroot, devgen); . 120c return devwalk(c, name, rootdir, nroot, devgen); . 84,91c addrootfile("boot", bootcode, bootlen); /* always have a boot file */ . 69,78c if(nroot >= Nfiles) panic("too many root files"); rootdata[nroot] = contents; d = &rootdir[nroot]; strcpy(d->name, name); d->length = len; d->perm = 0555; d->qid.path = nroot+1; nroot++; . 67c Dirtab *d; . 64,65c /* * add a root file */ void addrootfile(char *name, uchar *contents, ulong len) . 47a static uchar *rootdata[Nfiles]; static int nroot = Qboot - 1; . 40,46d 31,38c Dirtab rootdir[Nfiles]={ "bin", {Qbin|CHDIR}, 0, 0777, "dev", {Qdev|CHDIR}, 0, 0777, "env", {Qenv|CHDIR}, 0, 0777, "proc", {Qproc|CHDIR}, 0, 0777, "net", {Qnet|CHDIR}, 0, 0777, "recover", {Qrecover}, 0, 0777, . 24,27d 19,21c Nfiles=13, /* max root files */ . 17a Qboot, /* readable files */ . 9,11c enum{ Qdir= 0, . ## diffname port/devroot.c 1993/1031 ## diff -e /n/fornaxdump/1993/0724/sys/src/brazil/port/devroot.c /n/fornaxdump/1993/1031/sys/src/brazil/port/devroot.c 142a switch(c->qid.path) { default: break; case Qrecover: if(c->flag&COPEN) recovbusy = 0; break; } . 122a recovbusy = 1; . 120a if(recovbusy) error(Einuse); . 35a static int recovbusy; . ## diffname port/devroot.c 1995/0108 ## diff -e /n/fornaxdump/1993/1031/sys/src/brazil/port/devroot.c /n/fornaxdump/1995/0108/sys/src/brazil/port/devroot.c 232a } long rootbwrite(Chan *c, Block *bp, ulong offset) { return devbwrite(c, bp, offset); . 213a Block* rootbread(Chan *c, long n, ulong offset) { return devbread(c, n, offset); } . ## diffname port/devroot.c 1995/0804 ## diff -e /n/fornaxdump/1995/0108/sys/src/brazil/port/devroot.c /n/fornaxdump/1995/0804/sys/src/brazil/port/devroot.c 257d 255c rootwstat(Chan*, char*) . 250d 248c rootremove(Chan*) . 225d 221c rootwrite(Chan *c, void *buf, long n, ulong) . 160d 158c rdrdy(void*) . 146d 136d 134c rootcreate(Chan*, char*, int, ulong) . ## diffname port/devroot.c 1995/1114 ## diff -e /n/fornaxdump/1995/0804/sys/src/brazil/port/devroot.c /n/fornaxdump/1995/1114/sys/src/brazil/port/devroot.c 30a "net.alt", {Qnetalt|CHDIR}, 0, 0777, . 15a Qnetalt, . ## diffname port/devroot.c 1996/0223 ## diff -e /n/fornaxdump/1995/1114/sys/src/brazil/port/devroot.c /n/fornaxdump/1996/0223/sys/src/brazil/port/devroot.c 7d ## diffname port/devroot.c 1997/0327 ## diff -e /n/fornaxdump/1996/0223/sys/src/brazil/port/devroot.c /n/emeliedump/1997/0327/sys/src/brazil/port/devroot.c 238,254c Dev rootdevtab = { rootreset, devinit, rootattach, devclone, rootwalk, rootstat, rootopen, devcreate, rootclose, rootread, devbread, rootwrite, devbwrite, devremove, devwstat, }; . 212,218c static long . 162c static long . 156c static int . 143c static void . 134,139d 116c static Chan* . 110c static void . 92,98c static int . 81,86c static Chan* . 75c static void . ## diffname port/devroot.c 1997/0408 ## diff -e /n/emeliedump/1997/0327/sys/src/brazil/port/devroot.c /n/emeliedump/1997/0408/sys/src/brazil/port/devroot.c 215a '/', "root", . ## diffname port/devroot.c 1998/0319 ## diff -e /n/emeliedump/1997/0408/sys/src/brazil/port/devroot.c /n/emeliedump/1998/0319/sys/src/brazil/port/devroot.c 196c rootwrite(Chan *c, void *buf, long n, vlong) . 151a ulong offset = off; . 146c rootread(Chan *c, void *buf, long n, vlong off) . ## diffname port/devroot.c 1998/0512 ## diff -e /n/emeliedump/1998/0319/sys/src/brazil/port/devroot.c /n/emeliedump/1998/0512/sys/src/brazil/port/devroot.c 196c static long . 145c static long . 126c static void . 113c error(Einuse); . 99c static void . 87c static int . 63a . 62d 47c struct . 19c Nfiles=13, /* max root files */ . ## diffname port/devroot.c 1999/0316 ## diff -e /n/emeliedump/1998/0512/sys/src/brazil/port/devroot.c /n/emeliedump/1999/0316/sys/src/brazil/port/devroot.c 32a "root", {Qroot|CHDIR}, 0, 0777, . 16a Qroot, /* boot root */ // add new entries above this . ## diffname port/devroot.c 1999/0629 ## diff -e /n/emeliedump/1999/0316/sys/src/brazil/port/devroot.c /n/emeliedump/1999/0629/sys/src/brazil/port/devroot.c 249,251c r->req = smalloc(c->name->len+strlen(mntname)+2); sprint(r->req, "%s %s", c->name->s, mntname); . 246d 244d 242c rootrecover(Chan *c, char *mntname) . ## diffname port/devroot.c 1999/0729 ## diff -e /n/emeliedump/1999/0629/sys/src/brazil/port/devroot.c /n/emeliedump/1999/0729/sys/src/brazil/port/devroot.c 231c rootcreate, . 219a static void rootcreate(Chan *c, char *name, int mode, ulong perm) { if(!iseve()) error(Eperm); if(c->qid.path != (CHDIR|Qdir)) error(Eperm); perm &= 0777|CHDIR; if((perm & CHDIR) == 0) error(Eperm); c->flag |= COPEN; c->mode = mode & ~OWRITE; } . 79a addrootdir(char *name) { Dirtab *d; if(nroot >= Nfiles) panic("too many root files"); rootdata[nroot] = nil; d = &rootdir[nroot]; strcpy(d->name, name); d->length = 0; d->perm = 0; d->qid.path = nroot+1; nroot++; } static void . 78a /* * add a root file */ . ## diffname port/devroot.c 1999/0730 ## diff -e /n/emeliedump/1999/0729/sys/src/brazil/port/devroot.c /n/emeliedump/1999/0730/sys/src/brazil/port/devroot.c 248a addrootdir(name); . ## diffname port/devroot.c 1999/0731 ## diff -e /n/emeliedump/1999/0730/sys/src/brazil/port/devroot.c /n/emeliedump/1999/0731/sys/src/brazil/port/devroot.c 251c c->mode = OREAD; . 244,248d 242c if(!iseve() || c->qid.path != (CHDIR|Qdir) || (perm & CHDIR) == 0 || mode != OREAD) . 206,208d 100a addrootdir("bin"); addrootdir("dev"); addrootdir("env"); addrootdir("proc"); addrootdir("net"); addrootdir("net.alt"); addrootdir("root"); addrootdir("srv"); addrootdir("xsrv"); . 85,95c addroot(name, nil, 0, CHDIR); . 81a void addrootfile(char *name, uchar *contents, ulong len) { addroot(name, contents, len, 0555); } /* * add a root file */ . 75a if(perm & CHDIR) d->qid.path |= CHDIR; . 74c d->perm = perm; . 67d 62,63c static void addroot(char *name, uchar *contents, ulong len, int perm) . 40c static int nroot = 1; . 36d 28,34c Dirtab rootdir[Nfiles]= { . 19,22c Nfiles=32, /* max root files */ . 17d 10,15d ## diffname port/devroot.c 1999/0803 ## diff -e /n/emeliedump/1999/0731/sys/src/brazil/port/devroot.c /n/emeliedump/1999/0803/sys/src/brazil/port/devroot.c 79c addroot(name, nil, 0, CHDIR|0555); . ## diffname port/devroot.c 1999/1105 ## diff -e /n/emeliedump/1999/0803/sys/src/brazil/port/devroot.c /n/emeliedump/1999/1105/sys/src/9/port/devroot.c 261,275d 218,225d 213,214d 175,197d 149,152d 128,134d 24,25c static int nroot = 0; . 18,21c Dirtab rootdir[Nfiles]; . 10d ## diffname port/devroot.c 1999/1230 ## diff -e /n/emeliedump/1999/1105/sys/src/9/port/devroot.c /n/emeliedump/1999/1230/sys/src/9/port/devroot.c 172c rootwrite(Chan *c, void*, long, vlong) . 152d ## diffname port/devroot.c 2000/0221 ## diff -e /n/emeliedump/1999/1230/sys/src/9/port/devroot.c /n/emeliedump/2000/0221/sys/src/9/port/devroot.c 88d ## diffname port/devroot.c 2000/0223 ## diff -e /n/emeliedump/2000/0221/sys/src/9/port/devroot.c /n/emeliedump/2000/0223/sys/src/9/port/devroot.c 85a addrootdir("proc"); . 83d ## diffname port/devroot.c 2000/0615 ## diff -e /n/emeliedump/2000/0223/sys/src/9/port/devroot.c /n/emeliedump/2000/0615/sys/src/9/port/devroot.c 201c devcreate, . 179,189d ## diffname port/devroot.c 2001/0503 ## diff -e /n/emeliedump/2000/0615/sys/src/9/port/devroot.c /n/emeliedump/2001/0503/sys/src/9/port/devroot.c 133,136d 131c rootclose(Chan*) . ## diffname port/devroot.c 2001/0527 ## diff -e /n/emeliedump/2001/0503/sys/src/9/port/devroot.c /n/emeliedump/2001/0527/sys/src/9/port/devroot.c 182d 168c switch((ulong)c->qid.path){ . 149c t = c->qid.path; . 135,140d 119c switch((ulong)c->qid.path) { . 113c return devstat(c, dp, n, rootdir, nroot, devgen); . 110,111c static int rootstat(Chan *c, uchar *dp, int n) . 101,107c return devwalk(c, nc, name, nname, rootdir, nroot, devgen); . 98,99c static Walkqid* rootwalk(Chan *c, Chan *nc, char **name, int nname) . 82a addrootdir("fd"); . 74c addroot(name, nil, 0, DMDIR|0555); . 54,55c if(perm & DMDIR) d->qid.type |= QTDIR; . 52a d->qid.type = 0; d->qid.vers = 0; . 22,37d 20c static int nroot = 1; . 17c Dirtab rootdir[Nfiles] = { ".", {Qdir, 0, QTDIR}, 0, DMDIR|0555, }; . ## diffname port/devroot.c 2001/0819 ## diff -e /n/emeliedump/2001/0527/sys/src/9/port/devroot.c /n/emeliedump/2001/0819/sys/src/9/port/devroot.c 71a addrootdir("mnt"); . ## diffname port/devroot.c 2002/0109 ## diff -e /n/emeliedump/2001/0819/sys/src/9/port/devroot.c /n/emeliedump/2002/0109/sys/src/9/port/devroot.c 158a devshutdown, . ## diffname port/devroot.c 2002/1130 ## diff -e /n/emeliedump/2002/0109/sys/src/9/port/devroot.c /n/emeliedump/2002/1130/sys/src/9/port/devroot.c 172a . 146,149c error(Egreg); . 144c rootwrite(Chan*, void*, long, vlong) . 133,134c if(tdir[t-1]; data = l->data[t-1]; . 130c case Qboot: return devdirread(c, buf, n, nil, 0, rootgen); . 123a Dirlist *l; . 103,108c return devopen(c, omode, nil, 0, devgen); . 97c return devstat(c, dp, n, nil, 0, rootgen); . 91c return devwalk(c, nc, name, nname, nil, 0, rootgen); . 87a static int rootgen(Chan *c, char *name, Dirtab*, int, int s, Dir *dp) { int t; Dirtab *d; Dirlist *l; switch((int)c->qid.path){ case Qdir: return devgen(c, name, rootlist.dir, rootlist.ndir, s, dp); case Qboot: if(s == DEVDOTDOT){ devdir(c, (Qid){Qdir, 0, QTDIR}, "#/", 0, eve, 0555, dp); return 1; } return devgen(c, name, bootlist.dir, bootlist.ndir, s, dp); default: if((int)c->qid.path < Qboot){ t = c->qid.path-1; l = &rootlist; }else{ t = c->qid.path - Qboot - 1; l = &bootlist; } if(t >= l->ndir) return -1; if(s != 0) return -1; d = &l->dir[t]; devdir(c, d->qid, d->name, d->length, eve, d->perm, dp); return 1; } return -1; } . 78,79d 62c addlist(&rootlist, name, nil, 0, DMDIR|0555); . 57c * add a root directory . 53c addlist(&bootlist, name, contents, len, 0555); . 51c addbootfile(char *name, uchar *contents, ulong len) . 44d 41c d->qid.path = ++l->ndir + l->base; . 34,35c l->data[l->ndir] = contents; d = &l->dir[l->ndir]; . 32c if(l->ndir >= l->mdir) . 28c addlist(Dirlist *l, char *name, uchar *contents, ulong len, int perm) . 25c * add a file to the list . 21,22c static Dirtab bootdir[Nbootfiles] = { "boot", {Qboot, 0, QTDIR}, 0, DMDIR|0555, }; static uchar *bootdata[Nbootfiles]; static Dirlist bootlist = { Qboot, bootdir, bootdata, 1, Nbootfiles }; . 19a static uchar *rootdata[Nrootfiles]; static Dirlist rootlist = { 0, rootdir, rootdata, 2, Nrootfiles }; . 17,18c static Dirtab rootdir[Nrootfiles] = { "#/", {Qdir, 0, QTDIR}, 0, DMDIR|0555, "boot", {Qboot, 0, QTDIR}, 0, DMDIR|0555, . 14,15c typedef struct Dirlist Dirlist; struct Dirlist { uint base; Dirtab *dir; uchar **data; int ndir; int mdir; }; . 11c Nrootfiles = 32, Nbootfiles = 16, . 8,9c enum { Qdir = 0, Qboot = 0x1000, . ## diffname port/devroot.c 2003/0112 ## diff -e /n/emeliedump/2002/1130/sys/src/9/port/devroot.c /n/emeliedump/2003/0112/sys/src/9/port/devroot.c 14c Nbootfiles = 32, . ## diffname port/devroot.c 2003/0303 ## diff -e /n/emeliedump/2003/0112/sys/src/9/port/devroot.c /n/emeliedump/2003/0303/sys/src/9/port/devroot.c 199,200c t--; if(t >= l->ndir) error(Egreg); d = &l->dir[t]; data = l->data[t]; . 141,142d 131a if(s != 0) return -1; . 123a if(s == DEVDOTDOT){ devdir(c, (Qid){Qdir, 0, QTDIR}, "#/", 0, eve, 0555, dp); return 1; } . ## diffname port/devroot.c 2003/0329 ## diff -e /n/emeliedump/2003/0303/sys/src/9/port/devroot.c /n/emeliedump/2003/0329/sys/src/9/port/devroot.c 146a if(t < 0){ print("rootgen %llud %d %d\n", c->qid.path, s, t); panic("whoops"); } . 135a if(s == DEVDOTDOT){ if((int)c->qid.path < Qboot) devdir(c, (Qid){Qdir, 0, QTDIR}, "#/", 0, eve, 0555, dp); else devdir(c, (Qid){Qboot, 0, QTDIR}, "#/", 0, eve, 0555, dp); return 1; } . ## diffname port/devroot.c 2003/0405 ## diff -e /n/emeliedump/2003/0329/sys/src/9/port/devroot.c /n/emeliedump/2003/0405/sys/src/9/port/devroot.c 223a #ifdef asdf print("[%d] kaddr %.8ulx base %.8ulx offset %ld (%.8ulx), n %d %.8ulx %.8ulx %.8ulx\n", t, buf, data, offset, offset, n, ((ulong*)(data+offset))[0], ((ulong*)(data+offset))[1], ((ulong*)(data+offset))[2]); #endif asdf .