From 97ad80ab4009e6d91af0cdd6414b329aa116b9e6 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 17 Apr 1997 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1997-04-17 --- ip/ip.h | 2 +- pc/ether79c970.c | 30 +++++++++++++++++------------- pc/ether82557.c | 47 +++++++++++++++++++++++++++-------------------- pc/etherelnk3.c | 40 ++++++++++++++++++++++------------------ port/devcons.c | 9 ++------- port/netif.c | 37 ++++++++++++++++++++----------------- port/portdat.h | 1 + 7 files changed, 90 insertions(+), 76 deletions(-) diff --git a/ip/ip.h b/ip/ip.h index 8d7f0a9c4eb4fd56b2ac64085eccffa852c8a474..ba908a2c2fb732b7b161d59e424123013a628477 100644 --- a/ip/ip.h +++ b/ip/ip.h @@ -121,7 +121,7 @@ void Mediasetraddr(Media*, Ipaddr); Ipaddr Mediagetaddr(Media*); Ipaddr Mediagetraddr(Media*); void Mediawrite(Media*, Block*, byte*); -int Mediaifcread(byte*, ulong, int); +int Mediaifcread(char*, ulong, int); char* Mediaifcwrite(char*, int); void Mediaresolver(Media*); void Mediaread(Media*); diff --git a/pc/ether79c970.c b/pc/ether79c970.c index b47b35a02ec4abe7f068f793cea014b9d83d1c8d..95e65ef754cea4cac4da86034c3819b3a8ce7e5c 100644 --- a/pc/ether79c970.c +++ b/pc/ether79c970.c @@ -156,9 +156,9 @@ attach(Ether* ether) static long ifstat(Ether* ether, void* a, long n, ulong offset) { - Ctlr *ctlr; - char buf[512]; + char *p; int len; + Ctlr *ctlr; ctlr = ether->ctlr; @@ -170,17 +170,21 @@ ifstat(Ether* ether, void* a, long n, ulong offset) if(n == 0) return 0; - len = sprint(buf, "Rxbuff: %ld\n", ctlr->rxbuff); - len += sprint(buf+len, "Crc: %ld\n", ctlr->crc); - len += sprint(buf+len, "Oflo: %ld\n", ctlr->oflo); - len += sprint(buf+len, "Fram: %ld\n", ctlr->fram); - len += sprint(buf+len, "Rtry: %ld\n", ctlr->rtry); - len += sprint(buf+len, "Lcar: %ld\n", ctlr->lcar); - len += sprint(buf+len, "Lcol: %ld\n", ctlr->lcol); - len += sprint(buf+len, "Uflo: %ld\n", ctlr->uflo); - sprint(buf+len, "Txbuff: %ld\n", ctlr->txbuff); - - return readstr(offset, a, n, buf); + p = malloc(READSTR); + len = snprint(p, READSTR, "Rxbuff: %ld\n", ctlr->rxbuff); + len += snprint(p+len, READSTR-len, "Crc: %ld\n", ctlr->crc); + len += snprint(p+len, READSTR-len, "Oflo: %ld\n", ctlr->oflo); + len += snprint(p+len, READSTR-len, "Fram: %ld\n", ctlr->fram); + len += snprint(p+len, READSTR-len, "Rtry: %ld\n", ctlr->rtry); + len += snprint(p+len, READSTR-len, "Lcar: %ld\n", ctlr->lcar); + len += snprint(p+len, READSTR-len, "Lcol: %ld\n", ctlr->lcol); + len += snprint(p+len, READSTR-len, "Uflo: %ld\n", ctlr->uflo); + snprint(p+len, READSTR-len, "Txbuff: %ld\n", ctlr->txbuff); + + n = readstr(offset, a, n, p); + free(p); + + return n; } static void diff --git a/pc/ether82557.c b/pc/ether82557.c index 6c52ab29e1ed9f6c006b176bf610f8fcac898849..dacc058385a8c1f406d54d7cfd9c51d8a86140eb 100644 --- a/pc/ether82557.c +++ b/pc/ether82557.c @@ -367,12 +367,14 @@ promiscuous(void* arg, int on) static long ifstat(Ether* ether, void* a, long n, ulong offset) { - Ctlr *ctlr; - char buf[512]; + char *p; int len; + Ctlr *ctlr; + ulong dump[17]; ctlr = ether->ctlr; lock(&ctlr->dlock); + ctlr->dump[16] = 0; ilock(&ctlr->rlock); @@ -398,26 +400,31 @@ ifstat(Ether* ether, void* a, long n, ulong offset) return 0; } - len = sprint(buf, "transmit good frames: %ld\n", ctlr->dump[0]); - len += sprint(buf+len, "transmit maximum collisions errors: %ld\n", ctlr->dump[1]); - len += sprint(buf+len, "transmit late collisions errors: %ld\n", ctlr->dump[2]); - len += sprint(buf+len, "transmit underrun errors: %ld\n", ctlr->dump[3]); - len += sprint(buf+len, "transmit lost carrier sense: %ld\n", ctlr->dump[4]); - len += sprint(buf+len, "transmit deferred: %ld\n", ctlr->dump[5]); - len += sprint(buf+len, "transmit single collisions: %ld\n", ctlr->dump[6]); - len += sprint(buf+len, "transmit multiple collisions: %ld\n", ctlr->dump[7]); - len += sprint(buf+len, "transmit total collisions: %ld\n", ctlr->dump[8]); - len += sprint(buf+len, "receive good frames: %ld\n", ctlr->dump[9]); - len += sprint(buf+len, "receive CRC errors: %ld\n", ctlr->dump[10]); - len += sprint(buf+len, "receive alignment errors: %ld\n", ctlr->dump[11]); - len += sprint(buf+len, "receive resource errors: %ld\n", ctlr->dump[12]); - len += sprint(buf+len, "receive overrun errors: %ld\n", ctlr->dump[13]); - len += sprint(buf+len, "receive collision detect errors: %ld\n", ctlr->dump[14]); - sprint(buf+len, "receive short frame errors: %ld\n", ctlr->dump[15]); - + memmove(dump, ctlr->dump, sizeof(dump)); unlock(&ctlr->dlock); - return readstr(offset, a, n, buf); + p = malloc(READSTR); + len = snprint(p, READSTR, "transmit good frames: %ld\n", dump[0]); + len += snprint(p+len, READSTR-len, "transmit maximum collisions errors: %ld\n", dump[1]); + len += snprint(p+len, READSTR-len, "transmit late collisions errors: %ld\n", dump[2]); + len += snprint(p+len, READSTR-len, "transmit underrun errors: %ld\n", dump[3]); + len += snprint(p+len, READSTR-len, "transmit lost carrier sense: %ld\n", dump[4]); + len += snprint(p+len, READSTR-len, "transmit deferred: %ld\n", dump[5]); + len += snprint(p+len, READSTR-len, "transmit single collisions: %ld\n", dump[6]); + len += snprint(p+len, READSTR-len, "transmit multiple collisions: %ld\n", dump[7]); + len += snprint(p+len, READSTR-len, "transmit total collisions: %ld\n", dump[8]); + len += snprint(p+len, READSTR-len, "receive good frames: %ld\n", dump[9]); + len += snprint(p+len, READSTR-len, "receive CRC errors: %ld\n", dump[10]); + len += snprint(p+len, READSTR-len, "receive alignment errors: %ld\n", dump[11]); + len += snprint(p+len, READSTR-len, "receive resource errors: %ld\n", dump[12]); + len += snprint(p+len, READSTR-len, "receive overrun errors: %ld\n", dump[13]); + len += snprint(p+len, READSTR-len, "receive collision detect errors: %ld\n", dump[14]); + snprint(p+len, READSTR-len, "receive short frame errors: %ld\n", dump[15]); + + n = readstr(offset, a, n, p); + free(p); + + return n; } static void diff --git a/pc/etherelnk3.c b/pc/etherelnk3.c index a87f486aa11020d685d915554c5b09e56f32308b..647a844510353acb203dab1e7af6464e06ed439a 100644 --- a/pc/etherelnk3.c +++ b/pc/etherelnk3.c @@ -856,9 +856,9 @@ interrupt(Ureg*, void* arg) static long ifstat(Ether* ether, void* a, long n, ulong offset) { - Ctlr *ctlr; - char buf[512]; + char *p; int len; + Ctlr *ctlr; if(n == 0) return 0; @@ -869,22 +869,26 @@ ifstat(Ether* ether, void* a, long n, ulong offset) statistics(ether); iunlock(&ctlr->wlock); - len = sprint(buf, "interrupts: %ld\n", ctlr->interrupts); - len += sprint(buf+len, "timer: %ld\n", ctlr->timer); - len += sprint(buf+len, "carrierlost: %ld\n", ctlr->stats[CarrierLost]); - len += sprint(buf+len, "sqeerrors: %ld\n", ctlr->stats[SqeErrors]); - len += sprint(buf+len, "multiplecolls: %ld\n", ctlr->stats[MultipleColls]); - len += sprint(buf+len, "singlecollframes: %ld\n", ctlr->stats[SingleCollFrames]); - len += sprint(buf+len, "latecollisions: %ld\n", ctlr->stats[LateCollisions]); - len += sprint(buf+len, "rxoverruns: %ld\n", ctlr->stats[RxOverruns]); - len += sprint(buf+len, "framesxmittedok: %ld\n", ctlr->stats[FramesXmittedOk]); - len += sprint(buf+len, "framesrcvdok: %ld\n", ctlr->stats[FramesRcvdOk]); - len += sprint(buf+len, "framesdeferred: %ld\n", ctlr->stats[FramesDeferred]); - len += sprint(buf+len, "bytesrcvdok: %ld\n", ctlr->stats[BytesRcvdOk]); - len += sprint(buf+len, "bytesxmittedok: %ld\n", ctlr->stats[BytesRcvdOk+1]); - sprint(buf+len, "badssd: %ld\n", ctlr->stats[BytesRcvdOk+2]); - - return readstr(offset, a, n, buf); + p = malloc(READSTR); + len = snprint(p, READSTR, "interrupts: %ld\n", ctlr->interrupts); + len += snprint(p+len, READSTR-len, "timer: %ld\n", ctlr->timer); + len += snprint(p+len, READSTR-len, "carrierlost: %ld\n", ctlr->stats[CarrierLost]); + len += snprint(p+len, READSTR-len, "sqeerrors: %ld\n", ctlr->stats[SqeErrors]); + len += snprint(p+len, READSTR-len, "multiplecolls: %ld\n", ctlr->stats[MultipleColls]); + len += snprint(p+len, READSTR-len, "singlecollframes: %ld\n", ctlr->stats[SingleCollFrames]); + len += snprint(p+len, READSTR-len, "latecollisions: %ld\n", ctlr->stats[LateCollisions]); + len += snprint(p+len, READSTR-len, "rxoverruns: %ld\n", ctlr->stats[RxOverruns]); + len += snprint(p+len, READSTR-len, "framesxmittedok: %ld\n", ctlr->stats[FramesXmittedOk]); + len += snprint(p+len, READSTR-len, "framesrcvdok: %ld\n", ctlr->stats[FramesRcvdOk]); + len += snprint(p+len, READSTR-len, "framesdeferred: %ld\n", ctlr->stats[FramesDeferred]); + len += snprint(p+len, READSTR-len, "bytesrcvdok: %ld\n", ctlr->stats[BytesRcvdOk]); + len += snprint(p+len, READSTR-len, "bytesxmittedok: %ld\n", ctlr->stats[BytesRcvdOk+1]); + snprint(p+len, READSTR-len, "badssd: %ld\n", ctlr->stats[BytesRcvdOk+2]); + + n = readstr(offset, a, n, p); + free(p); + + return n; } typedef struct Adapter { diff --git a/port/devcons.c b/port/devcons.c index 728bd4e8067bee559c63af21f1f619b4a4049cb4..d32e2ef7143a16bc25a62f6fbc7d1921256cde83 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -397,11 +397,6 @@ static Dirtab consdir[]={ "user", {Quser}, NAMELEN, 0666, }; -enum -{ - MBS = 1024, -}; - ulong boottime; /* seconds since epoch at boot */ long @@ -672,12 +667,12 @@ consread(Chan *c, void *buf, long n, ulong offset) return randomread(buf, n); case Qdrivers: - b = malloc(MBS); + b = malloc(READSTR); 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 += snprint(b+n, READSTR-n, "#%C %s\n", devtab[i]->dc, devtab[i]->name); n = readstr(offset, buf, n, b); free(b); return n; diff --git a/port/netif.c b/port/netif.c index 69f0d251ef773b9ac91a558d2b65edb500084e65..ff9a8b9064e4362fe7cbc79312fc417cce0e16a8 100644 --- a/port/netif.c +++ b/port/netif.c @@ -120,9 +120,10 @@ netifwalk(Netif *nif, Chan *c, char *name) Chan* netifopen(Netif *nif, Chan *c, int omode) { - int id = 0; + int id; Netfile *f; + id = 0; if(c->qid.path & CHDIR){ if(omode != OREAD) error(Eperm); @@ -162,7 +163,7 @@ netifread(Netif *nif, Chan *c, void *a, long n, ulong offset) { int i, j; Netfile *f; - char buf[1024]; + char *p; if(c->qid.path&CHDIR) return devdirread(c, a, n, (Dirtab*)nif, 0, netifgen); @@ -174,20 +175,23 @@ netifread(Netif *nif, Chan *c, void *a, long n, ulong offset) case Nctlqid: return readnum(offset, a, n, NETID(c->qid.path), NUMSIZE); case Nstatqid: - j = sprint(buf, "in: %d\n", nif->inpackets); - j += sprint(buf+j, "out: %d\n", nif->outpackets); - j += sprint(buf+j, "crc errs: %d\n", nif->crcs); - j += sprint(buf+j, "overflows: %d\n", nif->overflows); - j += sprint(buf+j, "soft overflows: %d\n", nif->soverflows); - j += sprint(buf+j, "framing errs: %d\n", nif->frames); - j += sprint(buf+j, "buffer errs: %d\n", nif->buffs); - j += sprint(buf+j, "output errs: %d\n", nif->oerrs); - j += sprint(buf+j, "prom: %d\n", nif->prom); - j += sprint(buf+j, "addr: "); + p = malloc(READSTR); + j = snprint(p, READSTR, "in: %d\n", nif->inpackets); + j += snprint(p+j, READSTR-j, "out: %d\n", nif->outpackets); + j += snprint(p+j, READSTR-j, "crc errs: %d\n", nif->crcs); + j += snprint(p+j, READSTR-j, "overflows: %d\n", nif->overflows); + j += snprint(p+j, READSTR-j, "soft overflows: %d\n", nif->soverflows); + j += snprint(p+j, READSTR-j, "framing errs: %d\n", nif->frames); + j += snprint(p+j, READSTR-j, "buffer errs: %d\n", nif->buffs); + j += snprint(p+j, READSTR-j, "output errs: %d\n", nif->oerrs); + j += snprint(p+j, READSTR-j, "prom: %d\n", nif->prom); + j += snprint(p+j, READSTR-j, "addr: "); for(i = 0; i < nif->alen; i++) - j += sprint(buf+j, "%2.2ux", nif->addr[i]); - sprint(buf+j, "\n"); - return readstr(offset, a, n, buf); + j += snprint(p+j, READSTR-j, "%2.2ux", nif->addr[i]); + snprint(p+j, READSTR-j, "\n"); + n = readstr(offset, a, n, p); + free(p); + return n; case Ntypeqid: f = nif->f[NETID(c->qid.path)]; return readnum(offset, a, n, f->type, NUMSIZE); @@ -214,8 +218,7 @@ long netifwrite(Netif *nif, Chan *c, void *a, long n) { Netfile *f; - char *p; - char buf[256]; + char *p, buf[64]; uchar binaddr[Nmaxaddr]; if(NETTYPE(c->qid.path) != Nctlqid) diff --git a/port/portdat.h b/port/portdat.h index 6bb8196b253834b72a16c544377331605b578615..bbc24b78e40297ada0009d3b80a25996947e0272 100644 --- a/port/portdat.h +++ b/port/portdat.h @@ -618,6 +618,7 @@ enum MAXCRYPT = 127, NUMSIZE = 12, /* size of formatted number */ MB = (1024*1024), + READSTR = 1000, /* temporary buffer size for device reads */ }; extern Conf conf;