1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* ftinit.c */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* FreeType initialization layer (body). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* Copyright 1996-2002, 2005, 2007, 2009, 2012, 2013 by */ 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This file is part of the FreeType project, and may only be used, */ 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* modified, and distributed under the terms of the FreeType project */ 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* this file you indicate that you have read the license and */ 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* understand and accept it fully. */ 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The purpose of this file is to implement the following two */ 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* functions: */ 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_Add_Default_Modules(): */ 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This function is used to add the set of default modules to a */ 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* fresh new library object. The set is taken from the header file */ 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* `freetype/config/ftmodule.h'. See the document `FreeType 2.0 */ 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Build System' for more information. */ 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_Init_FreeType(): */ 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This function creates a system object for the current platform, */ 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* builds a library out of it, then calls FT_Default_Drivers(). */ 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Note that even if FT_Init_FreeType() uses the implementation of the */ 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* system object defined at build time, client applications are still */ 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* able to provide their own `ftsystem.c'. */ 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h> 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_CONFIG_CONFIG_H 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_OBJECTS_H 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_DEBUG_H 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_MODULE_H 45295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include "basepic.h" 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* messages during execution. */ 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_COMPONENT 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_COMPONENT trace_init 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 57e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 58295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifndef FT_CONFIG_OPTION_PIC 59295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 60e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_USE_MODULE 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 630a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_USE_MODULE( type, x ) extern "C" const type x; 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 650a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_USE_MODULE( type, x ) extern const type x; 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_CONFIG_MODULES_H 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_USE_MODULE 710a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_USE_MODULE( type, x ) (const FT_Module_Class*)&(x), 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const FT_Module_Class* const ft_default_modules[] = 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_CONFIG_MODULES_H 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 80e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 81295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else /* FT_CONFIG_OPTION_PIC */ 82295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 83e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 84295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef __cplusplus 85295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_EXTERNC extern "C" 86295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 87295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_EXTERNC extern 88295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif 89295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 90295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* declare the module's class creation/destruction functions */ 91295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_USE_MODULE 92e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#define FT_USE_MODULE( type, x ) \ 93e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_EXTERNC FT_Error \ 94e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Create_Class_ ## x( FT_Library library, \ 95e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Module_Class* *output_class ); \ 96e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_EXTERNC void \ 97e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Destroy_Class_ ## x( FT_Library library, \ 98e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Module_Class* clazz ); 99295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 100295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_CONFIG_MODULES_H 101295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 102295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* count all module classes */ 103295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_USE_MODULE 104e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#define FT_USE_MODULE( type, x ) MODULE_CLASS_ ## x, 105295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 106aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich enum 107aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich { 108295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_CONFIG_MODULES_H 109295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_NUM_MODULE_CLASSES 110295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner }; 111295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 112e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang /* destroy all module classes */ 113295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_USE_MODULE 114e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#define FT_USE_MODULE( type, x ) \ 115e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang if ( classes[i] ) \ 116e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang { \ 117e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Destroy_Class_ ## x( library, classes[i] ); \ 118e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang } \ 119e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang i++; 120e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 121295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 122295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_BASE_DEF( void ) 123295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ft_destroy_default_module_classes( FT_Library library ) 124295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 125e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Module_Class* *classes; 126e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Memory memory; 127e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_UInt i; 128e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang BasePIC* pic_container = (BasePIC*)library->pic_container.base; 129e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 130295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 131295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( !pic_container->default_module_classes ) 132295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return; 133295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 134e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang memory = library->memory; 135295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner classes = pic_container->default_module_classes; 136e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang i = 0; 137295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 138295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_CONFIG_MODULES_H 139295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 140295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_FREE( classes ); 141295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner pic_container->default_module_classes = 0; 142295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 143295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 144e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 145295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* initialize all module classes and the pointer table */ 146295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_USE_MODULE 147e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#define FT_USE_MODULE( type, x ) \ 148e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang error = FT_Create_Class_ ## x( library, &clazz ); \ 149e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang if ( error ) \ 150e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang goto Exit; \ 151295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner classes[i++] = clazz; 152295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 153e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 154295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_BASE_DEF( FT_Error ) 155295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ft_create_default_module_classes( FT_Library library ) 156295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 157e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Error error; 158e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Memory memory; 159a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Module_Class* *classes = NULL; 160e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Module_Class* clazz; 161e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_UInt i; 162e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang BasePIC* pic_container = (BasePIC*)library->pic_container.base; 163e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 164e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 165e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang memory = library->memory; 166e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 167295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner pic_container->default_module_classes = 0; 168295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 169a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang if ( FT_ALLOC( classes, sizeof ( FT_Module_Class* ) * 170e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang ( FT_NUM_MODULE_CLASSES + 1 ) ) ) 171295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return error; 172e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 173295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* initialize all pointers to 0, especially the last one */ 174e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang for ( i = 0; i < FT_NUM_MODULE_CLASSES; i++ ) 175295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner classes[i] = 0; 176295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner classes[FT_NUM_MODULE_CLASSES] = 0; 177295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 178295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner i = 0; 179295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 180295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_CONFIG_MODULES_H 181295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 182e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang Exit: 183e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang if ( error ) 184e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang ft_destroy_default_module_classes( library ); 185e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang else 186e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang pic_container->default_module_classes = classes; 187295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 188e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang return error; 189295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 190295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 191295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 192295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif /* FT_CONFIG_OPTION_PIC */ 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 194e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftmodapi.h */ 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( void ) 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Add_Default_Modules( FT_Library library ) 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const FT_Module_Class* const* cur; 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 204e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang /* FT_DEFAULT_MODULES_GET dereferences `library' in PIC mode */ 205e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#ifdef FT_CONFIG_OPTION_PIC 206e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang if ( !library ) 207e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang return; 208e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif 209e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 210e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang /* GCC 4.6 warns the type difference: 211e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang * FT_Module_Class** != const FT_Module_Class* const* 212e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang */ 213e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang cur = (const FT_Module_Class* const*)FT_DEFAULT_MODULES_GET; 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 215e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang /* test for valid `library' delayed to FT_Add_Module() */ 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project while ( *cur ) 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Add_Module( library, *cur ); 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* notify errors, but don't stop */ 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 221295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_TRACE0(( "FT_Add_Default_Module:" 222295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner " Cannot install `%s', error = 0x%x\n", 223aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich (*cur)->module_name, error )); 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cur++; 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in freetype.h */ 230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Init_FreeType( FT_Library *alibrary ) 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory; 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* First of all, allocate a new system object -- this function is part */ 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* of the system-specific component, i.e. `ftsystem.c'. */ 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project memory = FT_New_Memory(); 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !memory ) 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" )); 245a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_THROW( Unimplemented_Feature ); 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* build a library out of it, then fill it with the set of */ 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* default drivers. */ 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_New_Library( memory, alibrary ); 252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Done_Memory( memory ); 254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Add_Default_Modules( *alibrary ); 256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in freetype.h */ 262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Done_FreeType( FT_Library library ) 265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( library ) 267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory = library->memory; 269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Discard the library object */ 272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Done_Library( library ); 273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* discard memory manager */ 275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Done_Memory( memory ); 276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return FT_Err_Ok; 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 283