plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

commit 95409400f71c426d4ef5811f5dbdf1c0778464f5
parent c42a1d3d6168df56f966ea1f3ba3ef39ebbff4e4
Author: rsc <devnull@localhost>
Date:   Tue, 21 Feb 2006 20:46:49 +0000

events buffer need not end in NUL

Diffstat:
Msrc/cmd/acme/mail/mesg.c | 2+-
Msrc/cmd/acme/wind.c | 2+-
Msrc/cmd/acme/xfid.c | 11+++++++----
3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/cmd/acme/mail/mesg.c b/src/cmd/acme/mail/mesg.c @@ -346,7 +346,7 @@ readfile(char *dir, char *name, int *np) len = d->length; free(d); data = emalloc(len+1); - fsread(fid, data, len); + len = fsreadn(fid, data, len); fsclose(fid); if(np != nil) *np = len; diff --git a/src/cmd/acme/wind.c b/src/cmd/acme/wind.c @@ -679,7 +679,7 @@ winevent(Window *w, char *fmt, ...) if(b == nil) error("vsmprint failed"); n = strlen(b); - w->events = realloc(w->events, w->nevents+1+n); + w->events = erealloc(w->events, w->nevents+1+n); w->events[w->nevents++] = w->owner; memmove(w->events+w->nevents, b, n); free(b); diff --git a/src/cmd/acme/xfid.c b/src/cmd/acme/xfid.c @@ -976,7 +976,6 @@ void xfideventread(Xfid *x, Window *w) { Fcall fc; - char *b; int i, n; i = 0; @@ -1000,10 +999,14 @@ xfideventread(Xfid *x, Window *w) fc.count = n; fc.data = w->events; respond(x, &fc, nil); - b = w->events; - w->events = estrdup(w->events+n); - free(b); w->nevents -= n; + if(w->nevents){ + memmove(w->events, w->events+n, w->nevents); + w->events = erealloc(w->events, w->nevents); + }else{ + free(w->events); + w->events = nil; + } } void