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