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