ref: 06e1c84895e4a14a795da67620d1c676a576927c
parent: 158dbb20414e9e82e2fd3807ad00fc129a74a10a
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Mon Apr 30 07:48:30 EDT 2012
faces: fix memory leaks
--- a/sys/src/cmd/faces/facedb.c
+++ b/sys/src/cmd/faces/facedb.c
@@ -270,8 +270,10 @@
* Ignore 512x512 directories.
* Save 48x48 directories for later.
*/
- if((fd = open(dir, OREAD)) < 0)
+ if((fd = open(dir, OREAD)) < 0){+ free(dom);
return nil;
+ }
while((n = dirread(fd, &d)) > 0){ for(i=0; i<n; i++){if((d[i].mode&DMDIR)
@@ -288,6 +290,7 @@
free(dom);
return x;
}
+ free(ndir);
}
}
free(d);
@@ -340,8 +343,12 @@
}
if(dom == nil)
dom = facedom;
- if(homeface == nil)
- homeface = smprint("%s/lib/face", getenv("home"));+ if(homeface == nil){+ if((p = getenv("home")) != nil){+ homeface = smprint("%s/lib/face", p);+ free(p);
+ }
+ }
f->unknown = 0;
if((p = tryfindfile(dom, user)) != nil)
@@ -575,4 +582,5 @@
replclipr(f->bit, 1, Rect(0, 0, Facesize, Facesize));
f->mask = nil;
}
+ free(fn);
}
--- a/sys/src/cmd/faces/util.c
+++ b/sys/src/cmd/faces/util.c
@@ -14,6 +14,7 @@
exits("mem");}
memset(v, 0, sz);
+ setmalloctag(v, getcallerpc(&sz));
return v;
}
@@ -25,6 +26,7 @@
fprint(2, "out of memory allocating %ld\n", sz);
exits("mem");}
+ setrealloctag(v, getcallerpc(&sz));
return v;
}
@@ -36,6 +38,7 @@
fprint(2, "out of memory in strdup(%.10s)\n", s);
exits("mem");}
+ setmalloctag(t, getcallerpc(&s));
return t;
}
--
⑨