Index: src/truetype/ttdriver.c |
diff --git a/src/truetype/ttdriver.c b/src/truetype/ttdriver.c |
index e70a61123345a8f3e5b83c60cc9bb43f37e84046..3669d458215815a139bbed2ac80b979e1dce61aa 100644 |
--- a/src/truetype/ttdriver.c |
+++ b/src/truetype/ttdriver.c |
@@ -4,7 +4,7 @@ |
/* */ |
/* TrueType font driver implementation (body). */ |
/* */ |
-/* Copyright 1996-2011 by */ |
+/* Copyright 1996-2012 by */ |
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
/* */ |
/* This file is part of the FreeType project, and may only be used, */ |
@@ -258,7 +258,7 @@ |
/*************************************************************************/ |
/* */ |
/* <Function> */ |
- /* Load_Glyph */ |
+ /* tt_glyph_load */ |
/* */ |
/* <Description> */ |
/* A driver method used to load a glyph within a given glyph slot. */ |
@@ -282,10 +282,10 @@ |
/* FreeType error code. 0 means success. */ |
/* */ |
static FT_Error |
- Load_Glyph( FT_GlyphSlot ttslot, /* TT_GlyphSlot */ |
- FT_Size ttsize, /* TT_Size */ |
- FT_UInt glyph_index, |
- FT_Int32 load_flags ) |
+ tt_glyph_load( FT_GlyphSlot ttslot, /* TT_GlyphSlot */ |
+ FT_Size ttsize, /* TT_Size */ |
+ FT_UInt glyph_index, |
+ FT_Int32 load_flags ) |
{ |
TT_GlyphSlot slot = (TT_GlyphSlot)ttslot; |
TT_Size size = (TT_Size)ttsize; |
@@ -313,7 +313,7 @@ |
if ( load_flags & FT_LOAD_NO_HINTING ) |
{ |
/* both FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT */ |
- /* are necessary to disable hinting for tricky fonts */ |
+ /* are necessary to disable hinting for tricky fonts */ |
if ( FT_IS_TRICKY( face ) ) |
load_flags &= ~FT_LOAD_NO_HINTING; |
@@ -402,19 +402,35 @@ |
tt_get_interface( FT_Module driver, /* TT_Driver */ |
const char* tt_interface ) |
{ |
+ FT_Library library; |
FT_Module_Interface result; |
FT_Module sfntd; |
SFNT_Service sfnt; |
+ |
+ /* FT_TT_SERVICES_GET derefers `library' in PIC mode */ |
+#ifdef FT_CONFIG_OPTION_PIC |
+ if ( !driver ) |
+ return NULL; |
+ library = driver->library; |
+ if ( !library ) |
+ return NULL; |
+#endif |
+ |
result = ft_service_list_lookup( FT_TT_SERVICES_GET, tt_interface ); |
if ( result != NULL ) |
return result; |
+#ifndef FT_CONFIG_OPTION_PIC |
if ( !driver ) |
return NULL; |
+ library = driver->library; |
+ if ( !library ) |
+ return NULL; |
+#endif |
/* only return the default interface from the SFNT module */ |
- sfntd = FT_Get_Module( driver->library, "sfnt" ); |
+ sfntd = FT_Get_Module( library, "sfnt" ); |
if ( sfntd ) |
{ |
sfnt = (SFNT_Service)( sfntd->clazz->module_interface ); |
@@ -440,11 +456,10 @@ |
#define TT_SIZE_SELECT 0 |
#endif |
- FT_DEFINE_DRIVER(tt_driver_class, |
- |
- |
- FT_MODULE_FONT_DRIVER | |
- FT_MODULE_DRIVER_SCALABLE | |
+ FT_DEFINE_DRIVER( tt_driver_class, |
+ |
+ FT_MODULE_FONT_DRIVER | |
+ FT_MODULE_DRIVER_SCALABLE | |
TT_HINTER_FLAG, |
sizeof ( TT_DriverRec ), |
@@ -468,15 +483,15 @@ |
tt_size_init, |
tt_size_done, |
tt_slot_init, |
- 0, /* FT_Slot_DoneFunc */ |
+ 0, /* FT_Slot_DoneFunc */ |
- ft_stub_set_char_sizes, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |
+ ft_stub_set_char_sizes, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |
ft_stub_set_pixel_sizes, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |
- Load_Glyph, |
+ tt_glyph_load, |
tt_get_kerning, |
- 0, /* FT_Face_AttachFunc */ |
+ 0, /* FT_Face_AttachFunc */ |
tt_get_advances, |
tt_size_request, |