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/* */ 7727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/* 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 */ 26ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* `config/ftmodule.h'. See the document `FreeType 2.0 Build */ 27ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* 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 5741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 58295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifndef FT_CONFIG_OPTION_PIC 59295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 6041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 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 8041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 81295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else /* FT_CONFIG_OPTION_PIC */ 82295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 8341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 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 9241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#define FT_USE_MODULE( type, x ) \ 9341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_EXTERNC FT_Error \ 9441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Create_Class_ ## x( FT_Library library, \ 9541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Module_Class* *output_class ); \ 9641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_EXTERNC void \ 9741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Destroy_Class_ ## x( FT_Library library, \ 9841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 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 10441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#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 11241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier /* destroy all module classes */ 113295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_USE_MODULE 11441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#define FT_USE_MODULE( type, x ) \ 11541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( classes[i] ) \ 11641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier { \ 11741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Destroy_Class_ ## x( library, classes[i] ); \ 11841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier } \ 11941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier i++; 12041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 121295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 122295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_BASE_DEF( void ) 123295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ft_destroy_default_module_classes( FT_Library library ) 124295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 12541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Module_Class* *classes; 12641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Memory memory; 12741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_UInt i; 12841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier BasePIC* pic_container = (BasePIC*)library->pic_container.base; 12941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 130295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 131295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( !pic_container->default_module_classes ) 132295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return; 133295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 13441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier memory = library->memory; 135295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner classes = pic_container->default_module_classes; 13641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 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 14441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 145295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* initialize all module classes and the pointer table */ 146295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_USE_MODULE 14741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#define FT_USE_MODULE( type, x ) \ 14841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier error = FT_Create_Class_ ## x( library, &clazz ); \ 14941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( error ) \ 15041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier goto Exit; \ 151295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner classes[i++] = clazz; 152295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 15341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 154295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_BASE_DEF( FT_Error ) 155295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ft_create_default_module_classes( FT_Library library ) 156295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 15741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Error error; 15841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Memory memory; 159727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Module_Class* *classes = NULL; 16041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Module_Class* clazz; 16141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_UInt i; 16241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier BasePIC* pic_container = (BasePIC*)library->pic_container.base; 16341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 16441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 16541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier memory = library->memory; 16641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 167295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner pic_container->default_module_classes = 0; 168295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 169727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease if ( FT_ALLOC( classes, sizeof ( FT_Module_Class* ) * 17041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier ( FT_NUM_MODULE_CLASSES + 1 ) ) ) 171295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return error; 17241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 173295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* initialize all pointers to 0, especially the last one */ 17441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 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 18241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier Exit: 18341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( error ) 18441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier ft_destroy_default_module_classes( library ); 18541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier else 18641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier pic_container->default_module_classes = classes; 187295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 18841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier return error; 189295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 190295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 191295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 192295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif /* FT_CONFIG_OPTION_PIC */ 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 19441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 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 20441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier /* FT_DEFAULT_MODULES_GET dereferences `library' in PIC mode */ 20541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#ifdef FT_CONFIG_OPTION_PIC 20641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( !library ) 20741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier return; 20841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#endif 20941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 21041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier /* GCC 4.6 warns the type difference: 21141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier * FT_Module_Class** != const FT_Module_Class* const* 21241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier */ 21341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier cur = (const FT_Module_Class* const*)FT_DEFAULT_MODULES_GET; 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 21541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier /* 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" )); 245727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 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