From e5c0b2459079152bbed1b92398f758064db1e7dd Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sat, 11 May 1991 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1991-05-11 --- port/portfns.h | 1 + port/queue.c | 58 ++++++++++++++++++++++++++++++++++++------------ port/stnoether.c | 2 +- port/stream.c | 3 --- 4 files changed, 46 insertions(+), 18 deletions(-) diff --git a/port/portfns.h b/port/portfns.h index 61f83c43b0bc03e2a15e65f17124bcbf8ef41383..4fad3fba9b5391f3a2d2962fbfbcc584053a5b99 100644 --- a/port/portfns.h +++ b/port/portfns.h @@ -37,6 +37,7 @@ int devno(int, int); Chan* devopen(Chan*, int, Dirtab*, int, Devgen*); void devstat(Chan*, char*, Dirtab*, int, Devgen*); int devwalk(Chan*, char*, Dirtab*, int, Devgen*); +void* dmaalloc(ulong); void dumpqueues(void); void dumpregs(Ureg*); void dumpstack(void); diff --git a/port/queue.c b/port/queue.c index 423d82123b2595810749449dfa47d24201318a03..8e1119eb34edf5ec42505a59c53a2e7ced745d95 100644 --- a/port/queue.c +++ b/port/queue.c @@ -45,40 +45,70 @@ getc(IOQ *q) } void -puts(IOQ *q, char *s, int n) +puts(IOQ *q, void *buf, int n) { - int m; + int m; uchar *nextin; + uchar *s = buf; while(n){ - if(q->out > q->in) - m = q->out - q->in - 1; - else + m = q->out - q->in - 1; + if(m < 0) m = &q->buf[NQ] - q->in; + if(m == 0) + break; if(m > n) m = n; memmove(q->in, s, m); n -= m; - q->in += m; - if(q->in >= &q->buf[NQ]) + s += m; + nextin = q->in + m; + if(nextin >= &q->buf[NQ]) q->in = q->buf; + else + q->in = nextin; + } +} + +int +gets(IOQ *q, void *buf, int n) +{ + int m, k = 0; uchar *nextout; + uchar *s = buf; + + while(n){ + m = q->in - q->out; + if(m < 0) + m = &q->buf[NQ] - q->out; + if(m == 0) + return k; + if(m > n) + m = n; + memmove(s, q->out, m); + s += m; + k += m; + n -= m; + nextout = q->out + m; + if(nextout >= &q->buf[NQ]) + q->out = q->buf; + else + q->out = nextout; } + return k; } int cangetc(void *arg) { IOQ *q = (IOQ *)arg; - return q->in != q->out; + int n = q->in - q->out; + if (n < 0) + n += sizeof(q->buf); + return n; } int canputc(void *arg) { IOQ *q = (IOQ *)arg; - uchar *next; - - next = q->in+1; - if(next >= &q->buf[sizeof(q->buf)]) - next = q->buf; - return next != q->out; + return sizeof(q->buf)-cangetc(q)-1; } diff --git a/port/stnoether.c b/port/stnoether.c index 1fa7fe8b457f170d827fd30f760f0cba839ef8bd..eff320897bcf3775a507319ebc7338af57d910c8 100644 --- a/port/stnoether.c +++ b/port/stnoether.c @@ -186,7 +186,7 @@ noetheriput(Queue *q, Block *bp) circuit = (nh->circuit[2]<<16) | (nh->circuit[1]<<8) | nh->circuit[0]; s = (nh->sum[1]<<8) | nh->sum[0]; if(s && s!=nonetcksum(bp, ETHERHDRSIZE)){ - print("checksum error %ux %ux\n", s, (nh->sum[1]<<8) | nh->sum[0]); /**/ +/* print("checksum error %ux %ux\n", s, (nh->sum[1]<<8) | nh->sum[0]); /**/ freeb(bp); return; } diff --git a/port/stream.c b/port/stream.c index 55716465c02e3503aab87d82253d8d78da69713e..5e887ebe5a538edf387f4fc5746cfebd11155d37 100644 --- a/port/stream.c +++ b/port/stream.c @@ -1269,9 +1269,6 @@ streamwrite(Chan *c, void *a, long n, int docopy) s = c->stream; - if(n == 1 && *((char*)a) == 1) - print("u->p->pid %d %s\n", u->p->pid, u->p->text); - /* * decode the qid */