git: 9front

Download patch

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;
 }
 
--