~kris/9p

9hist

393b646a9877dee2b1dba8d0471ff26656baf9a1 — David du Colombier 29 years ago 8d3a722
Plan 9 from Bell Labs 1997-04-10
2 files changed, 31 insertions(+), 13 deletions(-)

M port/devcons.c
M port/qio.c
M port/devcons.c => port/devcons.c +19 -1
@@ 351,6 351,7 @@ enum{
	Qcons,
	Qconsctl,
	Qcputime,
	Qdrivers,
	Qhz,
	Qkey,
	Qhostdomain,


@@ 369,7 370,7 @@ enum{
	Quser,
};

Dirtab consdir[]={
static Dirtab consdir[]={
	"authenticate",	{Qauth},	0,		0666,
	"authcheck",	{Qauthcheck},	0,		0666,
	"authenticator", {Qauthent},	0,		0666,


@@ 377,6 378,7 @@ Dirtab consdir[]={
	"cons",		{Qcons},	0,		0660,
	"consctl",	{Qconsctl},	0,		0220,
	"cputime",	{Qcputime},	6*NUMSIZE,	0444,
	"drivers",	{Qdrivers},	0,		0644,
	"hostdomain",	{Qhostdomain},	DOMLEN,		0664,
	"hostowner",	{Qhostowner},	NAMELEN,	0664,
	"hz",		{Qhz},		NUMSIZE,	0666,


@@ 395,6 397,11 @@ Dirtab consdir[]={
 	"user",		{Quser},	NAMELEN,	0666,
};

enum
{
	MBS	=	1024,
};

ulong	boottime;		/* seconds since epoch at boot */

long


@@ 664,6 671,17 @@ consread(Chan *c, void *buf, long n, ulong offset)
	case Qrandom:
		return randomread(buf, n);

	case Qdrivers:
		b = malloc(MBS);
		if(b == nil)
			error(Enomem);
		n = 0;
		for(i = 0; devtab[i] != nil; i++)
			n += snprint(b+n, MBS-n, "#%C %s\n", devtab[i]->dc,  devtab[i]->name);
		n = readstr(offset, buf, n, b);
		free(b);
		return n;

	default:
		print("consread %lux\n", c->qid);
		error(Egreg);

M port/qio.c => port/qio.c +12 -12
@@ 489,7 489,7 @@ qdiscard(Queue *q, int len)
	Block *b;
	int dowakeup, n, sofar;

	lock(q);
	ilock(q);
	for(sofar = 0; sofar < len; sofar += n){
		b = q->bfirst;
		if(b == nil)


@@ 513,7 513,7 @@ qdiscard(Queue *q, int len)
	} else
		dowakeup = 0;

	unlock(q);
	iunlock(q);

	if(dowakeup)
		wakeup(&q->wr);


@@ 530,13 530,13 @@ qconsume(Queue *q, void *vp, int len)
	uchar *p = vp;

	/* sync with qwrite */
	lock(q);
	ilock(q);

	for(;;) {
		b = q->bfirst;
		if(b == 0){
			q->state |= Qstarve;
			unlock(q);
			iunlock(q);
			return -1;
		}
		QDEBUG checkb(b, "qconsume 1");


@@ 564,7 564,7 @@ qconsume(Queue *q, void *vp, int len)
	} else
		dowakeup = 0;

	unlock(q);
	iunlock(q);

	if(dowakeup)
		wakeup(&q->wr);


@@ 631,19 631,19 @@ qproduce(Queue *q, void *vp, int len)

	/* sync with qread */
	dowakeup = 0;
	lock(q);
	ilock(q);

	/* no waiting receivers, room in buffer? */
	if(q->len >= q->limit){
		q->state |= Qflow;
		unlock(q);
		iunlock(q);
		return -1;
	}

	/* save in buffer */
	b = iallocb(len);
	if(b == 0){
		unlock(q);
		iunlock(q);
		return 0;
	}
	memmove(b->wp, p, len);


@@ 662,7 662,7 @@ qproduce(Queue *q, void *vp, int len)
		q->state &= ~Qstarve;
		dowakeup = 1;
	}
	unlock(q);
	iunlock(q);

	if(dowakeup)
		wakeup(&q->rr);


@@ 683,13 683,13 @@ qcopy(Queue *q, int len, ulong offset)

	nb = allocb(len);

	lock(q);
	ilock(q);

	/* go to offset */
	b = q->bfirst;
	for(sofar = 0; ; sofar += n){
		if(b == nil){
			unlock(q);
			iunlock(q);
			return nb;
		}
		n = BLEN(b);


@@ 715,7 715,7 @@ qcopy(Queue *q, int len, ulong offset)
		n = BLEN(b);
		p = b->rp;
	}
	unlock(q);
	iunlock(q);

	return nb;
}