~kris/9p

9hist

f0fd01bf1be50dc46c8170afd86795fb2a85883b — David du Colombier 26 years ago e8994fe
Plan 9 from Bell Labs 2000-03-25
3 files changed, 36 insertions(+), 9 deletions(-)

M port/devproc.c
M port/devssl.c
M port/proc.c
M port/devproc.c => port/devproc.c +4 -0
@@ 560,6 560,8 @@ procread(Chan *c, void *va, long n, vlong off)
		return sizeof(Waitmsg);

	case Qns:
		if(p->pgrp == nil)
			error(Ebadusefd);
		mw = c->aux;
		if(mw->cddone)
			return 0;


@@ 584,6 586,8 @@ procread(Chan *c, void *va, long n, vlong off)
	case Qnoteid:
		return readnum(offset, va, n, p->noteid, NUMSIZE);
	case Qfd:
		if(p->fgrp == nil)
			error(Ebadusefd);
		return procfds(p, va, n, offset);
	}
	error(Egreg);

M port/devssl.c => port/devssl.c +24 -7
@@ 97,8 97,8 @@ enum{
};

#define TYPE(x) 	((x).path & 0xf)
#define CONV(x) 	(((x).path >> 4)&(Maxdstate-1))
#define QID(c, y) 	(((c)<<4) | (y))
#define CONV(x) 	(((x).path >> 5)&(Maxdstate-1))
#define QID(c, y) 	(((c)<<5) | (y))

static void	ensure(Dstate*, Block**, int);
static void	consume(Block**, uchar*, int);


@@ 112,6 112,16 @@ static void	sslhangup(Dstate*);
static Dstate*	dsclone(Chan *c);
static void	dsnew(Chan *c, Dstate **);

char *sslnames[] = {
[Qclonus]	"clone",
[Qdata]		"data",
[Qctl]		"ctl",
[Qsecretin]	"secretin",
[Qsecretout]	"secretout",
[Qencalgs]	"encalgs",
[Qhashalgs]	"hashalgs",
};

static int
sslgen(Chan *c, Dirtab *d, int nd, int s, Dir *dp)
{


@@ 126,18 136,18 @@ sslgen(Chan *c, Dirtab *d, int nd, int s, Dir *dp)
	case Qtopdir:
		if(s == DEVDOTDOT){
			q.path = QID(0, Qtopdir)|CHDIR;
			devdir(c, q, "#D", 0, eve, 0555, dp);
			devdir(c, q, "#D", 0, eve, CHDIR|0555, dp);
			return 1;
		}
		if(s > 0)
			return -1;
		q.path = QID(0, Qprotodir)|CHDIR;
		devdir(c, q, "ssl", 0, eve, 0555, dp);
		devdir(c, q, "ssl", 0, eve, CHDIR|0555, dp);
		return 1;
	case Qprotodir:
		if(s == DEVDOTDOT){
			q.path = QID(0, Qtopdir)|CHDIR;
			devdir(c, q, ".", 0, eve, 0555, dp);
			devdir(c, q, ".", 0, eve, CHDIR|0555, dp);
			return 1;
		}
		if(s < dshiwat) {


@@ 148,7 158,7 @@ sslgen(Chan *c, Dirtab *d, int nd, int s, Dir *dp)
				nm = ds->user;
			else
				nm = eve;
			devdir(c, q, name, 0, nm, 0555, dp);
			devdir(c, q, name, 0, nm, CHDIR|0555, dp);
			return 1;
		}
		if(s > dshiwat)


@@ 159,7 169,7 @@ sslgen(Chan *c, Dirtab *d, int nd, int s, Dir *dp)
	case Qconvdir:
		if(s == DEVDOTDOT){
			q.path = QID(0, Qprotodir)|CHDIR;
			devdir(c, q, "ssl", 0, eve, 0555, dp);
			devdir(c, q, "ssl", 0, eve, CHDIR|0555, dp);
			return 1;
		}
		ds = dstate[CONV(c->qid)];


@@ 197,6 207,13 @@ sslgen(Chan *c, Dirtab *d, int nd, int s, Dir *dp)
		}
		devdir(c, q, p, 0, nm, 0660, dp);
		return 1;
	case Qclonus:
		devdir(c, c->qid, sslnames[TYPE(c->qid)], 0, eve, 0555, dp);
		return 1;
	default:
		ds = dstate[CONV(c->qid)];
		devdir(c, c->qid, sslnames[TYPE(c->qid)], 0, ds->user, 0660, dp);
		return 1;
	}
	return -1;
}

M port/proc.c => port/proc.c +8 -2
@@ 747,13 747,19 @@ pexit(char *exitstr, int freemem)
		closefgrp(fgrp);
		qunlock(&up->debug);
	}
	if(up->egrp)
	if(up->egrp){
		closeegrp(up->egrp);
	if(up->rgrp)
		up->egrp = nil;
	}
	if(up->rgrp){
		closergrp(up->rgrp);
		up->rgrp = nil;
	}

	cclose(up->dot);
	up->dot = nil;
	closepgrp(up->pgrp);
	up->pgrp = nil;

	/*
	 * if not a kernel process and have a parent,