(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.
This commit is contained in:
Darkvater 2006-12-04 18:57:09 +00:00
parent 34a92a6bf7
commit 43eb27c7a1
1 changed files with 6 additions and 5 deletions

View File

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