/* */
/* 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, */
#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;
#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),
0
};
+
#else /* FT_CONFIG_OPTION_PIC */
+
#ifdef __cplusplus
#define FT_EXTERNC extern "C"
#else
/* 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
{
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
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;
#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 )
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 );