diff options
Diffstat (limited to 'src/3rdparty/freetype/src/base/ftinit.c')
-rw-r--r-- | src/3rdparty/freetype/src/base/ftinit.c | 132 |
1 files changed, 83 insertions, 49 deletions
diff --git a/src/3rdparty/freetype/src/base/ftinit.c b/src/3rdparty/freetype/src/base/ftinit.c index f94f25a83c..c4c88201a1 100644 --- a/src/3rdparty/freetype/src/base/ftinit.c +++ b/src/3rdparty/freetype/src/base/ftinit.c @@ -4,7 +4,7 @@ /* */ /* FreeType initialization layer (body). */ /* */ -/* Copyright 1996-2001, 2002, 2005, 2007, 2009 by */ +/* Copyright 1996-2002, 2005, 2007, 2009, 2012-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -23,8 +23,8 @@ /* FT_Add_Default_Modules(): */ /* This function is used to add the set of default modules to a */ /* fresh new library object. The set is taken from the header file */ - /* `freetype/config/ftmodule.h'. See the document `FreeType 2.0 */ - /* Build System' for more information. */ + /* `config/ftmodule.h'. See the document `FreeType 2.0 Build */ + /* System' for more information. */ /* */ /* FT_Init_FreeType(): */ /* This function creates a system object for the current platform, */ @@ -54,8 +54,10 @@ #undef FT_COMPONENT #define FT_COMPONENT trace_init + #ifndef FT_CONFIG_OPTION_PIC + #undef FT_USE_MODULE #ifdef __cplusplus #define FT_USE_MODULE( type, x ) extern "C" const type x; @@ -63,10 +65,8 @@ #define FT_USE_MODULE( type, x ) extern const type x; #endif - #include FT_CONFIG_MODULES_H - #undef FT_USE_MODULE #define FT_USE_MODULE( type, x ) (const FT_Module_Class*)&(x), @@ -77,8 +77,10 @@ 0 }; + #else /* FT_CONFIG_OPTION_PIC */ + #ifdef __cplusplus #define FT_EXTERNC extern "C" #else @@ -87,42 +89,51 @@ /* declare the module's class creation/destruction functions */ #undef FT_USE_MODULE -#define FT_USE_MODULE( type, x ) \ - FT_EXTERNC FT_Error FT_Create_Class_##x( FT_Library library, FT_Module_Class** output_class ); \ - FT_EXTERNC void FT_Destroy_Class_##x( FT_Library library, FT_Module_Class* clazz ); +#define FT_USE_MODULE( type, x ) \ + FT_EXTERNC FT_Error \ + FT_Create_Class_ ## x( FT_Library library, \ + FT_Module_Class* *output_class ); \ + FT_EXTERNC void \ + FT_Destroy_Class_ ## x( FT_Library library, \ + FT_Module_Class* clazz ); #include FT_CONFIG_MODULES_H - /* count all module classes */ #undef FT_USE_MODULE -#define FT_USE_MODULE( type, x ) MODULE_CLASS_##x, +#define FT_USE_MODULE( type, x ) MODULE_CLASS_ ## x, - enum { + enum + { #include FT_CONFIG_MODULES_H FT_NUM_MODULE_CLASSES }; - /* destroy all module classes */ + /* destroy all module classes */ #undef FT_USE_MODULE -#define FT_USE_MODULE( type, x ) \ - if ( classes[i] ) { FT_Destroy_Class_##x(library, classes[i]); } \ - i++; \ +#define FT_USE_MODULE( type, x ) \ + if ( classes[i] ) \ + { \ + FT_Destroy_Class_ ## x( library, classes[i] ); \ + } \ + i++; + FT_BASE_DEF( void ) ft_destroy_default_module_classes( FT_Library library ) { - FT_Module_Class** classes; - FT_Memory memory; - FT_UInt i; - BasePIC* pic_container = (BasePIC*)library->pic_container.base; + FT_Module_Class* *classes; + FT_Memory memory; + FT_UInt i; + BasePIC* pic_container = (BasePIC*)library->pic_container.base; + if ( !pic_container->default_module_classes ) return; - memory = library->memory; + memory = library->memory; classes = pic_container->default_module_classes; - i = 0; + i = 0; #include FT_CONFIG_MODULES_H @@ -130,30 +141,37 @@ pic_container->default_module_classes = 0; } + /* initialize all module classes and the pointer table */ #undef FT_USE_MODULE -#define FT_USE_MODULE( type, x ) \ - error = FT_Create_Class_##x(library, &clazz); \ - if (error) goto Exit; \ +#define FT_USE_MODULE( type, x ) \ + error = FT_Create_Class_ ## x( library, &clazz ); \ + if ( error ) \ + goto Exit; \ classes[i++] = clazz; + FT_BASE_DEF( FT_Error ) ft_create_default_module_classes( FT_Library library ) { - FT_Error error; - FT_Memory memory; - FT_Module_Class** classes; - FT_Module_Class* clazz; - FT_UInt i; - BasePIC* pic_container = (BasePIC*)library->pic_container.base; - - memory = library->memory; + FT_Error error; + FT_Memory memory; + FT_Module_Class* *classes = NULL; + FT_Module_Class* clazz; + FT_UInt i; + BasePIC* pic_container = (BasePIC*)library->pic_container.base; + + + memory = library->memory; + pic_container->default_module_classes = 0; - if ( FT_ALLOC(classes, sizeof(FT_Module_Class*) * (FT_NUM_MODULE_CLASSES + 1) ) ) + if ( FT_ALLOC( classes, sizeof ( FT_Module_Class* ) * + ( FT_NUM_MODULE_CLASSES + 1 ) ) ) return error; + /* initialize all pointers to 0, especially the last one */ - for (i = 0; i < FT_NUM_MODULE_CLASSES; i++) + for ( i = 0; i < FT_NUM_MODULE_CLASSES; i++ ) classes[i] = 0; classes[FT_NUM_MODULE_CLASSES] = 0; @@ -161,16 +179,19 @@ #include FT_CONFIG_MODULES_H -Exit: - if (error) ft_destroy_default_module_classes( library ); - else pic_container->default_module_classes = classes; + Exit: + if ( error ) + ft_destroy_default_module_classes( library ); + else + pic_container->default_module_classes = classes; - return error; + return error; } #endif /* FT_CONFIG_OPTION_PIC */ + /* documentation is in ftmodapi.h */ FT_EXPORT_DEF( void ) @@ -180,9 +201,18 @@ Exit: const FT_Module_Class* const* cur; - /* test for valid `library' delayed to FT_Add_Module() */ + /* FT_DEFAULT_MODULES_GET dereferences `library' in PIC mode */ +#ifdef FT_CONFIG_OPTION_PIC + if ( !library ) + return; +#endif + + /* GCC 4.6 warns the type difference: + * FT_Module_Class** != const FT_Module_Class* const* + */ + cur = (const FT_Module_Class* const*)FT_DEFAULT_MODULES_GET; - cur = FT_DEFAULT_MODULES_GET; + /* test for valid `library' delayed to FT_Add_Module() */ while ( *cur ) { error = FT_Add_Module( library, *cur ); @@ -205,6 +235,8 @@ Exit: FT_Memory memory; + /* check of `alibrary' delayed to `FT_New_Library' */ + /* First of all, allocate a new system object -- this function is part */ /* of the system-specific component, i.e. `ftsystem.c'. */ @@ -212,7 +244,7 @@ Exit: if ( !memory ) { FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" )); - return FT_Err_Unimplemented_Feature; + return FT_THROW( Unimplemented_Feature ); } /* build a library out of it, then fill it with the set of */ @@ -233,17 +265,19 @@ Exit: FT_EXPORT_DEF( FT_Error ) FT_Done_FreeType( FT_Library library ) { - if ( library ) - { - FT_Memory memory = library->memory; + FT_Memory memory; - /* Discard the library object */ - FT_Done_Library( library ); + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); - /* discard memory manager */ - FT_Done_Memory( memory ); - } + memory = library->memory; + + /* Discard the library object */ + FT_Done_Library( library ); + + /* discard memory manager */ + FT_Done_Memory( memory ); return FT_Err_Ok; } |