## 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(t<Qboot)
l = &rootlist;
else{
t -= Qboot;
l = &bootlist;
}
d = &l->dir[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
.
|