~kris/9p

9hist

d7bc9602196156d6ea438130405bff7e216e82f5 — David du Colombier 35 years ago 9584dbf
Plan 9 from Bell Labs 1991-06-15
3 files changed, 35 insertions(+), 25 deletions(-)

M port/devroot.c
M port/devwren.c
M port/sysfile.c
M port/devroot.c => port/devroot.c +30 -10
@@ 19,28 19,48 @@ enum{

extern long	cfslen;
extern ulong	cfscode[];

extern long	cryptfslen;
extern ulong	cryptfscode[];


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,
	"cryptfs",	{Qcryptfs},	0,			0700,
	"cfs",		{Qcfs},		0,			0700,
};

#define	NROOT	(sizeof rootdir/sizeof(Dirtab))
Dirtab rootpdir[]={
	"cfs",		{Qcfs},		0,			0700,
	"cryptfs",	{Qcryptfs},	0,			0700,
};
Dirtab *rootmap[sizeof rootpdir/sizeof(Dirtab)];
int	nroot;

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;
}

void
rootreset(void)
{
	nroot = (cfslen > 0) ? NROOT : NROOT-1;
	int i;

	i = 0;
	if(cfslen)
		rootmap[i++] = &rootpdir[0];
	if(cryptfslen)
		rootmap[i++] = &rootpdir[1];
	nroot = NROOT + i;
}

void


@@ 63,19 83,19 @@ rootclone(Chan *c, Chan *nc)
int	 
rootwalk(Chan *c, char *name)
{
	return devwalk(c, name, rootdir, nroot, devgen);
	return devwalk(c, name, rootdir, nroot, rootgen);
}

void	 
rootstat(Chan *c, char *dp)
{
	devstat(c, dp, rootdir, nroot, devgen);
	devstat(c, dp, rootdir, nroot, rootgen);
}

Chan*
rootopen(Chan *c, int omode)
{
	return devopen(c, omode, rootdir, nroot, devgen);
	return devopen(c, omode, rootdir, nroot, rootgen);
}

void	 


@@ 100,7 120,7 @@ rootread(Chan *c, void *buf, long n, ulong offset)

	switch(c->qid.path & ~CHDIR){
	case Qdir:
		return devdirread(c, buf, n, rootdir, nroot, devgen);
		return devdirread(c, buf, n, rootdir, nroot, rootgen);

	case Qboot:		/* boot */
		if(offset >= sizeof bootcode)

M port/devwren.c => port/devwren.c +1 -1
@@ 150,7 150,7 @@ wrenattach(char *param)
	d = &wren[dev];
	d->blocksize = BGLONG(&buf[4]);

	plen = BGLONG(&buf[0]);
	plen = BGLONG(&buf[0])+1;
	d->p[Npart].firstblock = 0;
	d->p[Npart].maxblock = plen;
	plen = plen/Npart;

M port/sysfile.c => port/sysfile.c +4 -14
@@ 364,8 364,6 @@ bindmount(ulong *arg, int ismount)
	Chan *c0, *c1;
	ulong flag;
	long ret;
	char *p;
	int t;
	struct{
		Chan	*chan;
		char	*spec;


@@ 378,20 376,12 @@ bindmount(ulong *arg, int ismount)
	if(ismount){
		bogus.chan = fdtochan(arg[0], 2);
		validaddr(arg[3], 1, 0);
		p = (char*)arg[3];
		t = BY2PG-((ulong)p&(BY2PG-1));
		while(vmemchr(p, 0, t) == 0){
			p += t;
			t = BY2PG;
		}
		if(vmemchr((char*)arg[3], '\0', NAMELEN) == 0)
			error(Ebadarg);
		bogus.spec = (char*)arg[3];
		validaddr(arg[4], 1, 0);
		p = (char*)arg[4];
		t = BY2PG-((ulong)p&(BY2PG-1));
		while(vmemchr(p, 0, t) == 0){
			p += t;
			t = BY2PG;
		}
		if(vmemchr((char*)arg[4], '\0', NAMELEN) == 0)
			error(Ebadarg);
		bogus.auth = (char*)arg[4];
		ret = devno('M', 0);
		c0 = (*devtab[ret].attach)((char*)&bogus);