ftinit.c revision 295ffce55e0198e7a9f7d46b33f5c2b4147bf821
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/* */ 7295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* Copyright 1996-2001, 2002, 2005, 2007, 2009 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 57295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifndef FT_CONFIG_OPTION_PIC 58295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_USE_MODULE 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 610a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_USE_MODULE( type, x ) extern "C" const type x; 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 630a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_USE_MODULE( type, x ) extern const type x; 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_CONFIG_MODULES_H 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 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 80295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else /* FT_CONFIG_OPTION_PIC */ 81295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 82295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef __cplusplus 83295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_EXTERNC extern "C" 84295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 85295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_EXTERNC extern 86295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif 87295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 88295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* declare the module's class creation/destruction functions */ 89295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_USE_MODULE 90295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_USE_MODULE( type, x ) \ 91295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_EXTERNC FT_Error FT_Create_Class_##x( FT_Library library, FT_Module_Class** output_class ); \ 92295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_EXTERNC void FT_Destroy_Class_##x( FT_Library library, FT_Module_Class* clazz ); 93295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 94295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_CONFIG_MODULES_H 95295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 96295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 97295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* count all module classes */ 98295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_USE_MODULE 99295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_USE_MODULE( type, x ) MODULE_CLASS_##x, 100295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 101295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner enum { 102295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_CONFIG_MODULES_H 103295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_NUM_MODULE_CLASSES 104295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner }; 105295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 106295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* destroy all module classes */ 107295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_USE_MODULE 108295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_USE_MODULE( type, x ) \ 109295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( classes[i] ) { FT_Destroy_Class_##x(library, classes[i]); } \ 110295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner i++; \ 111295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 112295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_BASE_DEF( void ) 113295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ft_destroy_default_module_classes( FT_Library library ) 114295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 115295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Module_Class** classes; 116295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Memory memory; 117295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_UInt i; 118295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner BasePIC* pic_container = (BasePIC*)library->pic_container.base; 119295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 120295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( !pic_container->default_module_classes ) 121295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return; 122295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 123295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner memory = library->memory; 124295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner classes = pic_container->default_module_classes; 125295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner i = 0; 126295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 127295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_CONFIG_MODULES_H 128295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 129295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_FREE( classes ); 130295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner pic_container->default_module_classes = 0; 131295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 132295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 133295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* initialize all module classes and the pointer table */ 134295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_USE_MODULE 135295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_USE_MODULE( type, x ) \ 136295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner error = FT_Create_Class_##x(library, &clazz); \ 137295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if (error) goto Exit; \ 138295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner classes[i++] = clazz; 139295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 140295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_BASE_DEF( FT_Error ) 141295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ft_create_default_module_classes( FT_Library library ) 142295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 143295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Error error; 144295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Memory memory; 145295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Module_Class** classes; 146295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Module_Class* clazz; 147295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_UInt i; 148295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner BasePIC* pic_container = (BasePIC*)library->pic_container.base; 149295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 150295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner memory = library->memory; 151295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner pic_container->default_module_classes = 0; 152295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 153295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( FT_ALLOC(classes, sizeof(FT_Module_Class*) * (FT_NUM_MODULE_CLASSES + 1) ) ) 154295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return error; 155295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* initialize all pointers to 0, especially the last one */ 156295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner for (i = 0; i < FT_NUM_MODULE_CLASSES; i++) 157295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner classes[i] = 0; 158295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner classes[FT_NUM_MODULE_CLASSES] = 0; 159295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 160295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner i = 0; 161295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 162295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_CONFIG_MODULES_H 163295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 164295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' TurnerExit: 165295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if (error) ft_destroy_default_module_classes( library ); 166295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner else pic_container->default_module_classes = classes; 167295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 168295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return error; 169295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 170295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 171295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 172295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif /* FT_CONFIG_OPTION_PIC */ 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftmodapi.h */ 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( void ) 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Add_Default_Modules( FT_Library library ) 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const FT_Module_Class* const* cur; 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* test for valid `library' delayed to FT_Add_Module() */ 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 185295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner cur = FT_DEFAULT_MODULES_GET; 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project while ( *cur ) 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Add_Module( library, *cur ); 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* notify errors, but don't stop */ 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 191295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_TRACE0(( "FT_Add_Default_Module:" 192295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner " Cannot install `%s', error = 0x%x\n", 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (*cur)->module_name, error )); 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cur++; 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in freetype.h */ 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Init_FreeType( FT_Library *alibrary ) 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory; 206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* First of all, allocate a new system object -- this function is part */ 209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* of the system-specific component, i.e. `ftsystem.c'. */ 210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project memory = FT_New_Memory(); 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !memory ) 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" )); 215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return FT_Err_Unimplemented_Feature; 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* build a library out of it, then fill it with the set of */ 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* default drivers. */ 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_New_Library( memory, alibrary ); 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Done_Memory( memory ); 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Add_Default_Modules( *alibrary ); 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in freetype.h */ 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Done_FreeType( FT_Library library ) 235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( library ) 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory = library->memory; 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Discard the library object */ 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Done_Library( library ); 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* discard memory manager */ 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Done_Memory( memory ); 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return FT_Err_Ok; 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 253