From 95409400f71c426d4ef5811f5dbdf1c0778464f5 Mon Sep 17 00:00:00 2001 From: rsc Date: Tue, 21 Feb 2006 20:46:49 +0000 Subject: events buffer need not end in NUL --- src/cmd/acme/mail/mesg.c | 2 +- src/cmd/acme/wind.c | 2 +- src/cmd/acme/xfid.c | 11 +++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/cmd/acme/mail/mesg.c b/src/cmd/acme/mail/mesg.c index 9406b799..2beedb05 100644 --- 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 index a2106ed2..2f0328c8 100644 --- 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 index 126a5fe9..15b411ce 100644 --- 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 -- cgit v1.2.3