changeset 23212:c932f521344d

In ass_font_new, allocate temporary ass_font_t on stack and return the pointer to cache-owned copy. This fixes leaked ass_font_t struct. Without this, font pointers obtained from ass_font_new() and ass_font_cache_find() were different, and bitmaps rendered with the first one could not be located in the cache later.
author eugeni
date Thu, 03 May 2007 19:26:43 +0000
parents d9b4bfea1093
children 5ea241439d5a
files libass/ass_font.c
diffstat 1 files changed, 17 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/libass/ass_font.c	Thu May 03 19:13:54 2007 +0000
+++ b/libass/ass_font.c	Thu May 03 19:26:43 2007 +0000
@@ -83,12 +83,13 @@
 	int index;
 	FT_Face face;
 	int error;
-	ass_font_t* font;
+	ass_font_t* fontp;
+	ass_font_t font;
 	int mem_idx;
 
-	font = ass_font_cache_find(desc);
-	if (font)
-		return font;
+	fontp = ass_font_cache_find(desc);
+	if (fontp)
+		return fontp;
 	
 	path = fontconfig_select(fc_priv, desc->family, desc->bold, desc->italic, &index);
 	
@@ -110,26 +111,23 @@
 
 	charmap_magic(face);
 	
-	font = calloc(1, sizeof(ass_font_t));
-	font->ftlibrary = ftlibrary;
-	font->faces[0] = face;
-	font->n_faces = 1;
-	font->desc.family = strdup(desc->family);
-	font->desc.bold = desc->bold;
-	font->desc.italic = desc->italic;
+	font.ftlibrary = ftlibrary;
+	font.faces[0] = face;
+	font.n_faces = 1;
+	font.desc.family = strdup(desc->family);
+	font.desc.bold = desc->bold;
+	font.desc.italic = desc->italic;
 
-	font->m.xx = font->m.yy = (FT_Fixed)0x10000L;
-	font->m.xy = font->m.yy = 0;
-	font->v.x = font->v.y = 0;
-	font->size = 0;
+	font.m.xx = font.m.yy = (FT_Fixed)0x10000L;
+	font.m.xy = font.m.yy = 0;
+	font.v.x = font.v.y = 0;
+	font.size = 0;
 
 #ifdef HAVE_FONTCONFIG
-	font->charset = FcCharSetCreate();
+	font.charset = FcCharSetCreate();
 #endif
 
-	ass_font_cache_add(font);
-	
-	return font;
+	return ass_font_cache_add(&font);
 }
 
 /**