From 41bd254198b8b879a562a85f7dc868c3c0f7fbc1 Mon Sep 17 00:00:00 2001 From: marha Date: Mon, 12 Mar 2012 10:33:22 +0100 Subject: Updated to freetype-2.4.9 --- freetype/src/psnames/psmodule.c | 20 ++++++++++++++---- freetype/src/psnames/psnamerr.h | 3 ++- freetype/src/psnames/pspic.c | 45 +++++++++++++++++++++++++++-------------- freetype/src/psnames/pspic.h | 9 ++++++++- 4 files changed, 56 insertions(+), 21 deletions(-) (limited to 'freetype/src/psnames') diff --git a/freetype/src/psnames/psmodule.c b/freetype/src/psnames/psmodule.c index 752869693..361917415 100644 --- a/freetype/src/psnames/psmodule.c +++ b/freetype/src/psnames/psmodule.c @@ -521,7 +521,7 @@ #ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST - FT_DEFINE_SERVICE_PSCMAPSREC(pscmaps_interface, + FT_DEFINE_SERVICE_PSCMAPSREC(pscmaps_interface, (PS_Unicode_ValueFunc) ps_unicode_value, (PS_Unicodes_InitFunc) ps_unicodes_init, (PS_Unicodes_CharIndexFunc)ps_unicodes_char_index, @@ -536,7 +536,7 @@ #else - FT_DEFINE_SERVICE_PSCMAPSREC(pscmaps_interface, + FT_DEFINE_SERVICE_PSCMAPSREC(pscmaps_interface, 0, 0, 0, @@ -552,7 +552,7 @@ #endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */ - FT_DEFINE_SERVICEDESCREC1(pscmaps_services, + FT_DEFINE_SERVICEDESCREC1(pscmaps_services, FT_SERVICE_ID_POSTSCRIPT_CMAPS, &FT_PSCMAPS_INTERFACE_GET ) @@ -563,7 +563,19 @@ psnames_get_service( FT_Module module, const char* service_id ) { + /* FT_PSCMAPS_SERVICES_GET derefers `library' in PIC mode */ +#ifdef FT_CONFIG_OPTION_PIC + FT_Library library; + + + if ( !module ) + return NULL; + library = module->library; + if ( !library ) + return NULL; +#else FT_UNUSED( module ); +#endif return ft_service_list_lookup( FT_PSCMAPS_SERVICES_GET, service_id ); } @@ -578,7 +590,7 @@ #endif FT_DEFINE_MODULE(psnames_module_class, - + 0, /* this is not a font driver, nor a renderer */ sizeof ( FT_ModuleRec ), diff --git a/freetype/src/psnames/psnamerr.h b/freetype/src/psnames/psnamerr.h index ae1541d96..acda7f967 100644 --- a/freetype/src/psnames/psnamerr.h +++ b/freetype/src/psnames/psnamerr.h @@ -4,7 +4,7 @@ /* */ /* PS names module error codes (specification only). */ /* */ -/* Copyright 2001 by */ +/* Copyright 2001, 2012 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -30,6 +30,7 @@ #undef __FTERRORS_H__ +#undef FT_ERR_PREFIX #define FT_ERR_PREFIX PSnames_Err_ #define FT_ERR_BASE FT_Mod_Err_PSnames diff --git a/freetype/src/psnames/pspic.c b/freetype/src/psnames/pspic.c index b9075d5a5..467ab7329 100644 --- a/freetype/src/psnames/pspic.c +++ b/freetype/src/psnames/pspic.c @@ -20,24 +20,37 @@ #include FT_FREETYPE_H #include FT_INTERNAL_OBJECTS_H #include "pspic.h" +#include "psnamerr.h" #ifdef FT_CONFIG_OPTION_PIC /* forward declaration of PIC init functions from psmodule.c */ - FT_Error FT_Create_Class_pscmaps_services( FT_Library, FT_ServiceDescRec**); - void FT_Destroy_Class_pscmaps_services( FT_Library, FT_ServiceDescRec*); - void FT_Init_Class_pscmaps_interface( FT_Library, FT_Service_PsCMapsRec*); + FT_Error + FT_Create_Class_pscmaps_services( FT_Library library, + FT_ServiceDescRec** output_class ); + void + FT_Destroy_Class_pscmaps_services( FT_Library library, + FT_ServiceDescRec* clazz ); void - psnames_module_class_pic_free( FT_Library library ) + FT_Init_Class_pscmaps_interface( FT_Library library, + FT_Service_PsCMapsRec* clazz ); + + void + psnames_module_class_pic_free( FT_Library library ) { - FT_PIC_Container* pic_container = &library->pic_container; - FT_Memory memory = library->memory; + FT_PIC_Container* pic_container = &library->pic_container; + FT_Memory memory = library->memory; + + if ( pic_container->psnames ) { - PSModulePIC* container = (PSModulePIC*)pic_container->psnames; + PSModulePIC* container = (PSModulePIC*)pic_container->psnames; + + if(container->pscmaps_services) - FT_Destroy_Class_pscmaps_services(library, container->pscmaps_services); + FT_Destroy_Class_pscmaps_services( library, + container->pscmaps_services ); container->pscmaps_services = NULL; FT_FREE( container ); pic_container->psnames = NULL; @@ -57,18 +70,20 @@ /* allocate pointer, clear and set global container pointer */ if ( FT_ALLOC ( container, sizeof ( *container ) ) ) return error; - FT_MEM_SET( container, 0, sizeof(*container) ); + FT_MEM_SET( container, 0, sizeof ( *container ) ); pic_container->psnames = container; /* initialize pointer table - this is how the module usually expects this data */ - error = FT_Create_Class_pscmaps_services(library, &container->pscmaps_services); - if(error) + error = FT_Create_Class_pscmaps_services( + library, &container->pscmaps_services ); + if ( error ) goto Exit; - FT_Init_Class_pscmaps_interface(library, &container->pscmaps_interface); - + FT_Init_Class_pscmaps_interface( library, + &container->pscmaps_interface ); + Exit: - if(error) - psnames_module_class_pic_free(library); + if ( error ) + psnames_module_class_pic_free( library ); return error; } diff --git a/freetype/src/psnames/pspic.h b/freetype/src/psnames/pspic.h index 75a14fdcb..1169b89f0 100644 --- a/freetype/src/psnames/pspic.h +++ b/freetype/src/psnames/pspic.h @@ -19,7 +19,7 @@ #ifndef __PSPIC_H__ #define __PSPIC_H__ - + FT_BEGIN_HEADER #include FT_INTERNAL_PIC_H @@ -42,6 +42,13 @@ FT_BEGIN_HEADER #define FT_PSCMAPS_SERVICES_GET (GET_PIC(library)->pscmaps_services) #define FT_PSCMAPS_INTERFACE_GET (GET_PIC(library)->pscmaps_interface) + /* see pspic.c for the implementation */ + void + psnames_module_class_pic_free( FT_Library library ); + + FT_Error + psnames_module_class_pic_init( FT_Library library ); + #endif /* FT_CONFIG_OPTION_PIC */ /* */ -- cgit v1.2.3