diff options
author | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-05-03 19:26:43 +0000 |
---|---|---|
committer | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-05-03 19:26:43 +0000 |
commit | 4e7a0af9e288f78b3e335eec895bf1f7768bdde9 (patch) | |
tree | e2b45475fd195ddc7711d3e5b04c851ccdf8146f /libass | |
parent | 679d3373a3081317891c6f4f54d056d0cb1a39b7 (diff) | |
download | libass-4e7a0af9e288f78b3e335eec895bf1f7768bdde9.tar.bz2 libass-4e7a0af9e288f78b3e335eec895bf1f7768bdde9.tar.xz |
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.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23230 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libass')
-rw-r--r-- | libass/ass_font.c | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/libass/ass_font.c b/libass/ass_font.c index 57423d1d..7217f408 100644 --- a/libass/ass_font.c +++ b/libass/ass_font.c @@ -83,12 +83,13 @@ ass_font_t* ass_font_new(ass_library_t* library, FT_Library ftlibrary, void* fc_ 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 @@ ass_font_t* ass_font_new(ass_library_t* library, FT_Library ftlibrary, void* fc_ 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); } /** |