| Index: src/base/ftinit.c
|
| diff --git a/src/base/ftinit.c b/src/base/ftinit.c
|
| index 305177a7e16bf1d7e11fc717e0f01a6e52659dd5..91f8e2a18c76c69439ec853c5b1bd463a85986b8 100644
|
| --- a/src/base/ftinit.c
|
| +++ b/src/base/ftinit.c
|
| @@ -4,7 +4,7 @@
|
| /* */
|
| /* FreeType initialization layer (body). */
|
| /* */
|
| -/* Copyright 1996-2001, 2002, 2005, 2007, 2009 by */
|
| +/* Copyright 1996-2001, 2002, 2005, 2007, 2009, 2012 by */
|
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -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,16 +89,19 @@
|
|
|
| /* 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
|
| {
|
| @@ -104,26 +109,31 @@
|
| 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
|
|
|
| @@ -131,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;
|
| + 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;
|
|
|
| @@ -162,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 )
|
| @@ -181,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 );
|
|
|