summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-09-05 18:36:58 +0200
committercinap_lenrek <cinap_lenrek@centraldogma>2011-09-05 18:36:58 +0200
commitc1d9d6e538908292ca76d2394b15885b1ac28ac9 (patch)
tree6f98c1f96b31ac6dfe6b2ae13fa0d5ae1eb47ea0
parente159e8e54a865a2d1eee7543c77c3584e46464be (diff)
downloadplan9front-c1d9d6e538908292ca76d2394b15885b1ac28ac9.tar.xz
mothra: cleanup, fix memory leak in libpanel
-rw-r--r--sys/src/cmd/mothra/libpanel/draw.c1
-rw-r--r--sys/src/cmd/mothra/libpanel/entry.c13
-rw-r--r--sys/src/cmd/mothra/libpanel/mem.c2
-rw-r--r--sys/src/cmd/mothra/mothra.c4
-rw-r--r--sys/src/cmd/mothra/rdhtml.c9
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");