/* find or create the class corresponding to a given type */ static FT_Class ft_metaclass_get_class( FT_MetaClass meta, FT_Type ctype ) { FT_ClassHNodeRec keynode, *node, **pnode; FT_Memory memory; keynode.hnode.hash = (FT_UInt32)( ctype >> 2 ); keynode.type = type; pnode = (FT_ClassHNode) ft_hash_lookup( &meta->type_to_class, &noderec ); node = *pnode; if ( node != NULL ) return node->clazz; memory = FT_CLASS__MEMORY(meta); node = FT_MEM_SAFE_ALLOC( sizeof(*node) ); if ( node != NULL ) { FT_ClassRec* clazz; clazz = FT_MEM_SAFE_ALLOC( ctype->class_size ); if ( clazz == NULL ) { FT_FREE( node ); FT_XTHROW( FT_Err_Out_Of_Memory ); } } }
/* open a standard stream from a given pathname */ static void ft_std_stream_init( FT_StdStream stream, const char* pathname ) { FT_ASSERT( pathname != NULL ); stream->file = fopen( pathname, "rb" ); if ( stream->file == NULL ) { FT_ERROR(( "iso.stream.init: could not open '%s'\n", pathname )); FT_XTHROW( FT_Err_Stream_Open ); } /* compute total size in bytes */ fseek( file, 0, SEEK_END ); FT_STREAM__SIZE(stream) = ftell( file ); fseek( file, 0, SEEK_SET ); stream->pathname = pathname; stream->pos = 0; FT_TRACE1(( "iso.stream.init: opened '%s' (%ld bytes) succesfully\n", pathname, FT_STREAM__SIZE(stream) )); }