1 /***************************************************************************/ 2 /* */ 3 /* pspic.c */ 4 /* */ 5 /* The FreeType position independent code services for psnames module. */ 6 /* */ 7 /* Copyright 2009, 2010, 2012, 2013 by */ 8 /* Oran Agra and Mickey Gabel. */ 9 /* */ 10 /* This file is part of the FreeType project, and may only be used, */ 11 /* modified, and distributed under the terms of the FreeType project */ 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13 /* this file you indicate that you have read the license and */ 14 /* understand and accept it fully. */ 15 /* */ 16 /***************************************************************************/ 17 18 19 #include <ft2build.h> 20 #include FT_FREETYPE_H 21 #include FT_INTERNAL_OBJECTS_H 22 #include "pspic.h" 23 #include "psnamerr.h" 24 25 26 #ifdef FT_CONFIG_OPTION_PIC 27 28 /* forward declaration of PIC init functions from psmodule.c */ 29 FT_Error 30 FT_Create_Class_pscmaps_services( FT_Library library, 31 FT_ServiceDescRec** output_class ); 32 void 33 FT_Destroy_Class_pscmaps_services( FT_Library library, 34 FT_ServiceDescRec* clazz ); 35 36 void 37 FT_Init_Class_pscmaps_interface( FT_Library library, 38 FT_Service_PsCMapsRec* clazz ); 39 40 41 void psnames_module_class_pic_free(FT_Library library)42 psnames_module_class_pic_free( FT_Library library ) 43 { 44 FT_PIC_Container* pic_container = &library->pic_container; 45 FT_Memory memory = library->memory; 46 47 48 if ( pic_container->psnames ) 49 { 50 PSModulePIC* container = (PSModulePIC*)pic_container->psnames; 51 52 53 if ( container->pscmaps_services ) 54 FT_Destroy_Class_pscmaps_services( library, 55 container->pscmaps_services ); 56 container->pscmaps_services = NULL; 57 FT_FREE( container ); 58 pic_container->psnames = NULL; 59 } 60 } 61 62 63 FT_Error psnames_module_class_pic_init(FT_Library library)64 psnames_module_class_pic_init( FT_Library library ) 65 { 66 FT_PIC_Container* pic_container = &library->pic_container; 67 FT_Error error = FT_Err_Ok; 68 PSModulePIC* container = NULL; 69 FT_Memory memory = library->memory; 70 71 72 /* allocate pointer, clear and set global container pointer */ 73 if ( FT_ALLOC( container, sizeof ( *container ) ) ) 74 return error; 75 FT_MEM_SET( container, 0, sizeof ( *container ) ); 76 pic_container->psnames = container; 77 78 /* initialize pointer table - */ 79 /* this is how the module usually expects this data */ 80 error = FT_Create_Class_pscmaps_services( 81 library, &container->pscmaps_services ); 82 if ( error ) 83 goto Exit; 84 FT_Init_Class_pscmaps_interface( library, 85 &container->pscmaps_interface ); 86 87 Exit: 88 if ( error ) 89 psnames_module_class_pic_free( library ); 90 return error; 91 } 92 93 94 #endif /* FT_CONFIG_OPTION_PIC */ 95 96 97 /* END */ 98