M ip/ip.h => ip/ip.h +1 -1
@@ 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*);
M pc/ether79c970.c => pc/ether79c970.c +17 -13
@@ 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
M pc/ether82557.c => pc/ether82557.c +27 -20
@@ 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
M pc/etherelnk3.c => pc/etherelnk3.c +22 -18
@@ 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 {
M port/devcons.c => port/devcons.c +2 -7
@@ 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;
M port/netif.c => port/netif.c +20 -17
@@ 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)
M port/portdat.h => port/portdat.h +1 -0
@@ 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;