This fixes font handling to be thread-safe.
////////////////////////////////////////////////////////////////////////
diff -Naurd old/SDL_ttf.c new/SDL_ttf.c
— old/SDL_ttf.c 2005-01-24 16:11:26.000000000 -0500
+++ new/SDL_ttf.c 2005-01-24 16:28:21.000000000 -0500
@@ -90,6 +90,7 @@
struct _TTF_Font {
/* Freetype2 maintains all sorts of useful info itself */
FT_Face face;
@@ -122,10 +123,7 @@
int font_size_family;
};
-/* The FreeType font engine/library */
-static FT_Library library;
-static int TTF_initialized = 0;
-static int TTF_byteswapped = 0;
+static int TTF_byteswapped;
/* UNICODE string utilities */
static inline int UNICODE_strlen(const Uint16 text)
@@ -205,21 +203,10 @@
#endif / USE_FREETYPE_ERRORS */
}
+/* this exists only to maintain the ABI */
int TTF_Init( void )
{
-
int status = 0;-
-
if ( ! TTF_initialized ) {
-
FT_Error error = FT_Init_FreeType( &library );
-
if ( error ) {
-
TTF_SetFTError("Couldn't init FreeType engine", error);
-
status = -1;
-
}
-
}
-
if ( status == 0 ) {
-
++TTF_initialized;
-
}
-
return status;
}
static unsigned long RWread(
@@ -245,11 +232,6 @@
FT_Stream stream;
int position;
-
if ( ! TTF_initialized ) {
-
TTF_SetError( "Library not initialized" );
-
return NULL;
-
}
-
/* Check to make sure we can seek in this stream */
position = SDL_RWtell(src);
if ( position < 0 ) {
@@ -267,6 +249,13 @@
font->src = src;
font->freesrc = freesrc;
-
FT_Error error = FT_Init_FreeType( &font->library );
-
if ( error ) {
-
TTF_SetFTError("Couldn't init FreeType engine", error);
-
free( font );
-
return NULL;
-
}
-
stream = (FT_Stream)malloc(sizeof(*stream));
if ( stream == NULL ) {
TTF_SetError( "Out of memory" );
@@ -275,7 +264,7 @@
}
memset(stream, 0, sizeof(*stream));
@@ -286,7 +275,7 @@
font->args.flags = FT_OPEN_STREAM;
font->args.stream = stream;
-
error = FT_Open_Face( font->library, &font->args, index, &font->face );
if( error ) {
TTF_SetFTError( "Couldn't load font file", error );
TTF_CloseFont( font );
@@ -668,6 +657,7 @@
if ( font->freesrc ) {
SDL_RWclose( font->src );
}
}
@@ -849,10 +839,6 @@
FT_UInt prev_index = 0;
/* Initialize everything to 0 */
-
if ( ! TTF_initialized ) {
-
TTF_SetError( "Library not initialized" );
-
return -1;
-
}
status = 0;
minx = maxx = 0;
miny = maxy = 0;
@@ -1735,14 +1721,10 @@
void TTF_Quit( void )
{
}
int TTF_WasInit( void )
{
}
////////////////////////////////////////////////////////////////////////