diff options
| author | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-09-05 18:36:58 +0200 |
|---|---|---|
| committer | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-09-05 18:36:58 +0200 |
| commit | c1d9d6e538908292ca76d2394b15885b1ac28ac9 (patch) | |
| tree | 6f98c1f96b31ac6dfe6b2ae13fa0d5ae1eb47ea0 | |
| parent | e159e8e54a865a2d1eee7543c77c3584e46464be (diff) | |
| download | plan9front-c1d9d6e538908292ca76d2394b15885b1ac28ac9.tar.xz | |
mothra: cleanup, fix memory leak in libpanel
| -rw-r--r-- | sys/src/cmd/mothra/libpanel/draw.c | 1 | ||||
| -rw-r--r-- | sys/src/cmd/mothra/libpanel/entry.c | 13 | ||||
| -rw-r--r-- | sys/src/cmd/mothra/libpanel/mem.c | 2 | ||||
| -rw-r--r-- | sys/src/cmd/mothra/mothra.c | 4 | ||||
| -rw-r--r-- | sys/src/cmd/mothra/rdhtml.c | 9 |
5 files changed, 17 insertions, 12 deletions
diff --git a/sys/src/cmd/mothra/libpanel/draw.c b/sys/src/cmd/mothra/libpanel/draw.c index a399024c1..3aa9bb57b 100644 --- a/sys/src/cmd/mothra/libpanel/draw.c +++ b/sys/src/cmd/mothra/libpanel/draw.c @@ -128,6 +128,7 @@ Point pl_boxsize(Point interior, int state){ case FRAME: return addpt(interior, Pt(4*FWID+2*SPACE, 4*FWID+2*SPACE)); } + return Pt(0, 0); } void pl_interior(int state, Point *ul, Point *size){ switch(state){ diff --git a/sys/src/cmd/mothra/libpanel/entry.c b/sys/src/cmd/mothra/libpanel/entry.c index a8e2c86c8..a8651b90a 100644 --- a/sys/src/cmd/mothra/libpanel/entry.c +++ b/sys/src/cmd/mothra/libpanel/entry.c @@ -89,7 +89,10 @@ void pl_childspaceentry(Panel *p, Point *ul, Point *size){ USED(p, ul, size); } void pl_freeentry(Panel *p){ - free(((Entry *)p->data)->entry); + Entry *ep; + ep = p->data; + free(ep->entry); + ep->entry = ep->eent = 0; } void plinitentry(Panel *v, int flags, int wid, char *str, void (*hit)(Panel *, char *)){ int elen; @@ -106,13 +109,11 @@ void plinitentry(Panel *v, int flags, int wid, char *str, void (*hit)(Panel *, c v->free=pl_freeentry; elen=100; if(str) elen+=strlen(str); - ep->entry=pl_emalloc(elen+SLACK); + if(ep->entry==nil) + ep->entry=pl_emalloc(elen+SLACK); ep->eent=ep->entry+elen; - if(str) - strcpy(ep->entry, str); - else ep->entry[0]='\0'; + strecpy(ep->entry, ep->eent, str ? str : ""); ep->entp=ep->entry+strlen(ep->entry); - /* strcat(ep->entry, "◀"); */ ep->hit=hit; v->kind="entry"; } diff --git a/sys/src/cmd/mothra/libpanel/mem.c b/sys/src/cmd/mothra/libpanel/mem.c index 84d9cb66b..5ad1371c1 100644 --- a/sys/src/cmd/mothra/libpanel/mem.c +++ b/sys/src/cmd/mothra/libpanel/mem.c @@ -6,7 +6,7 @@ #include "pldefs.h" void *pl_emalloc(int n){ void *v; - v=malloc(n); + v=mallocz(n, 1); if(v==0){ fprint(2, "Can't malloc!\n"); exits("no mem"); diff --git a/sys/src/cmd/mothra/mothra.c b/sys/src/cmd/mothra/mothra.c index 70306d48d..070817d60 100644 --- a/sys/src/cmd/mothra/mothra.c +++ b/sys/src/cmd/mothra/mothra.c @@ -951,7 +951,7 @@ void paste(Panel *p){ fd=open("/dev/snarf", OREAD); strncpy(buf, plentryval(p), sizeof(buf)); len=strlen(buf); - n=read(fd, buf+len, 1023-len); + n=read(fd, buf+len, sizeof(buf)-len-1); if(n>0){ buf[len+n]='\0'; plinitentry(cmd, PACKE|EXPAND, 0, buf, docmd); @@ -960,7 +960,7 @@ void paste(Panel *p){ close(fd); } void hit3(int button, int item){ - char name[100], *home; + char name[NNAME], *home; Panel *swap; int fd; USED(button); diff --git a/sys/src/cmd/mothra/rdhtml.c b/sys/src/cmd/mothra/rdhtml.c index 168ecd49d..efcf724bb 100644 --- a/sys/src/cmd/mothra/rdhtml.c +++ b/sys/src/cmd/mothra/rdhtml.c @@ -35,10 +35,13 @@ struct Fontdata{ "lucidasans/typeunicode.16", 0, 0, }; Fontdata *pl_whichfont(int f, int s){ - char name[100]; + char name[NNAME]; + + assert(f >= 0 && f < 4); + assert(s >= 0 && s < 4); + if(fontlist[f][s].font==0){ - snprint(name, sizeof(name), "/lib/font/bit/%s.font", - fontlist[f][s].name); + snprint(name, sizeof(name), "/lib/font/bit/%s.font", fontlist[f][s].name); fontlist[f][s].font=openfont(display, name); if(fontlist[f][s].font==0) fontlist[f][s].font=font; fontlist[f][s].space=stringwidth(fontlist[f][s].font, "0"); |
