~kris/9p

9hist

23cb9254181c4e2d6007bd86626c137dfb79f9d7 — David du Colombier 35 years ago f962154
Plan 9 from Bell Labs 1991-05-16
3 files changed, 21 insertions(+), 20 deletions(-)

M port/devip.c
M port/portfns.h
M port/stream.c
M port/devip.c => port/devip.c +19 -19
@@ 297,7 297,7 @@ ipread(Chan *c, void *a, long n, ulong offset)
		return stringread(c, a, n, buf, offset);
	}

	return Eperm;
	error(Eperm);
}

long


@@ 314,25 314,27 @@ ipwrite(Chan *c, char *a, long n, ulong offset)

	if (type == Sctlqid) {
		cp = &ipconv[c->dev][STREAMID(c->qid.path)];
		if(cp->stproto == &tcpinfo && cp->tcpctl.state != CLOSED)
			return Edevbusy;

		strncpy(buf, a, sizeof buf);
		m = getfields(buf, field, 5, ' ');

		if(strcmp(field[0], "connect") == 0) {
			if(cp->stproto == &tcpinfo &&
			   cp->tcpctl.state != CLOSED)
				error(Edevbusy);

			if(m != 2)
				return Ebadarg;
				error(Ebadarg);

			switch(getfields(field[1], field, 5, '!')) {
			default:
				return Ebadarg;
				error(Ebadarg);
			case 2:
				base = PORTALLOC;
				break;
			case 3:
				if(strcmp(field[2], "r") != 0)
					return Eperm;
					error(Eperm);
				base = PRIVPORTALLOC;
				break;
			}


@@ 348,14 350,18 @@ ipwrite(Chan *c, char *a, long n, ulong offset)
		}
		else if(strcmp(field[0], "announce") == 0 ||
			strcmp(field[0], "reserve") == 0) {
				if(cp->stproto == &tcpinfo &&
				   cp->tcpctl.state != CLOSED)
					error(Edevbusy);

			if(m != 2)
				return Ebadarg;
				error(Ebadarg);
			port = atoi(field[1]);

			qlock(&ipalloc);
			if(portused(ipconv[c->dev], port)) {
				qunlock(&ipalloc);	
				return Einuse;
				error(Einuse);
			}
			cp->psrc = port;
			cp->ptype = *field[0];


@@ 363,10 369,10 @@ ipwrite(Chan *c, char *a, long n, ulong offset)
		}
		else if(strcmp(field[0], "backlog") == 0) {
			if(m != 2)
				return Ebadarg;
				error(Ebadarg);
			backlog = atoi(field[1]);
			if(backlog == 0)
				return Ebadarg;
				error(Ebadarg);
			if(backlog > 5)
				backlog = 5;
			cp->backlog = backlog;


@@ 377,17 383,14 @@ ipwrite(Chan *c, char *a, long n, ulong offset)
		return n;
	}

	return Eperm;
	error(Eperm);
}


void
udpstiput(Queue *q, Block *bp)
{
	if(bp->type == M_CTL)
		PUTNEXT(q, bp);
	else
		panic("udpstiput: Why am I here");
	PUTNEXT(q, bp);
}

/*


@@ 535,10 538,7 @@ udpstopen(Queue *q, Stream *s)
void
tcpstiput(Queue *q, Block *bp)
{
	if(bp->type == M_CTL)
		PUTNEXT(q, bp);
	else
		panic("tcpstiput: Why am I here");
	PUTNEXT(q, bp);
}

void

M port/portfns.h => port/portfns.h +1 -0
@@ 122,6 122,7 @@ void	qlock(QLock*);
void	qunlock(QLock*);
int	readnum(ulong, char*, ulong, ulong, int);
void	ready(Proc*);
void	resched(char*);
int	return0(void*);
Proc*	runproc(void);
void	savefpregs(FPsave*);

M port/stream.c => port/stream.c +1 -1
@@ 251,7 251,7 @@ freeb(Block *bp)

	for(; bp; bp = nbp){
		bcp = &bclass[bp->flags & S_CLASS];
		bp->flags = bp->flags|S_CLASS;		/* Check for doulbe free */
		bp->flags = bp->flags|S_CLASS;		/* Check for double free */
		lock(bcp);
		bp->rptr = bp->wptr = 0;
		if(bcp->first)