From 23cb9254181c4e2d6007bd86626c137dfb79f9d7 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 16 May 1991 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1991-05-16 --- port/devip.c | 38 +++++++++++++++++++------------------- port/portfns.h | 1 + port/stream.c | 2 +- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/port/devip.c b/port/devip.c index 6922ae6b773b0e3fd3622fff22e0b5ff23d7b0a7..006dfaa56bbf6a98c5d93180694cdfc7c9951f27 100644 --- a/port/devip.c +++ b/port/devip.c @@ -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 diff --git a/port/portfns.h b/port/portfns.h index 44d1d5eb131dfc793402c4af481ce2cfd21cc7f5..2efd7e252c3bdf90bb33cd09e15c25796d7db9c4 100644 --- a/port/portfns.h +++ b/port/portfns.h @@ -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*); diff --git a/port/stream.c b/port/stream.c index 5e887ebe5a538edf387f4fc5746cfebd11155d37..0e8b1ed7248cabb2aebfd4d189d3f7efd0d71ccc 100644 --- a/port/stream.c +++ b/port/stream.c @@ -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)