From 0e465359c503ccc45396651ad9f5dc51601ae32b Mon Sep 17 00:00:00 2001 From: Darkvater Date: Mon, 4 Dec 2006 18:57:09 +0000 Subject: (svn r7362) -Fix (r7337): Free the freetype face after any possible error. For win32 do not use the last font in the registry if no suitable font is found. --- fontcache.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/fontcache.c b/fontcache.c index 4ad0e68ae..df52b4b73 100644 --- a/fontcache.c +++ b/fontcache.c @@ -68,7 +68,7 @@ static FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) DWORD dbuflen = lengthof(dbuffer); ret = RegEnumValue(hKey, index, vbuffer, &vbuflen, NULL, NULL, dbuffer, &dbuflen); - if (ret != ERROR_SUCCESS) break; + if (ret != ERROR_SUCCESS) goto registry_no_font_found; /* The font names in the registry are of the following 3 forms: * - ADMUI3.fon @@ -97,7 +97,7 @@ static FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) /* Some fonts are contained in .ttc files, TrueType Collection fonts. These * contain multiple fonts inside this single file. GetFontData however * returns the whole file, so we need to check each font inside to get the - * proper font. If not found, we will use the last font in the ttc. + * proper font. * Also note that FreeType does not support UNICODE filesnames! */ #if defined(UNICODE) font_path = malloc(MAX_PATH); @@ -123,6 +123,7 @@ static FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) #endif folder_error: +registry_no_font_found: RegCloseKey(hKey); return err; } @@ -241,11 +242,11 @@ static void LoadFreeTypeFont(const char *font_name, FT_Face *face, const char *t if (error == FT_Err_Ok) return; } } - - FT_Done_Face(*face); - *face = NULL; } + FT_Done_Face(*face); + *face = NULL; + ShowInfoF("Unable to use '%s' for %s font, FreeType reported error 0x%X, using sprite font instead", font_name, type, error); } -- cgit v1.2.3-70-g09d2