From e566a9616f3cea5d23869c986690b414351ef63c Mon Sep 17 00:00:00 2001 From: David Turner Date: Tue, 31 Oct 2000 10:58:23 +0000 Subject: [PATCH] at last, the infamous cache bug is fixed !! --- src/cache/ftcchunk.c | 16 ++++++++-------- src/cache/ftcmanag.c | 4 ++++ src/cache/ftcsbits.c | 12 +++--------- src/cache/rules.mk | 2 ++ 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/cache/ftcchunk.c b/src/cache/ftcchunk.c index ae2d3338b..f07fa2be4 100644 --- a/src/cache/ftcchunk.c +++ b/src/cache/ftcchunk.c @@ -44,12 +44,12 @@ FT_Error error = 0; - data->cache_index = (FT_UShort) cache->root.cache_index; - data->ref_count = (FT_Short) 0; - node->cset_index = (FT_UShort) index; - - node->num_elements = (index+1 < cset->element_count) - ? cset->element_count * cset->element_size + data->cache_index = (FT_UShort) cache->root.cache_index; + data->ref_count = (FT_Short) 0; + node->cset = cset; + node->cset_index = (FT_UShort) index; + node->num_elements = (index+1 < cset->num_chunks) + ? cset->element_count : cset->element_max - cset->element_count*index; if (alloc) { @@ -227,7 +227,7 @@ if (!node) { /* we didn't found the glyph image, we will now create a new one */ - error = clazz->new_node( cset, glyph_index, &node ); + error = clazz->new_node( cset, chunk_index, &node ); if ( error ) goto Exit; @@ -267,7 +267,7 @@ #define FTC_CSET_LRU_GET_CACHE( lru ) \ - ( (FTC_Chunk_Cache)(lru)->user_data ) + ( (FTC_Chunk_Cache)((lru)->user_data) ) #define FTC_CSET_LRU_GET_MANAGER( lru ) \ FTC_CSET_LRU_GET_CACHE( lru )->manager diff --git a/src/cache/ftcmanag.c b/src/cache/ftcmanag.c index e1a9412ad..994ff3a88 100644 --- a/src/cache/ftcmanag.c +++ b/src/cache/ftcmanag.c @@ -464,6 +464,10 @@ cache->manager = manager; cache->memory = memory; cache->clazz = clazz; + + /* THIS IS VERY IMPORTANT, THIS WILL WRECH THE MANAGER */ + /* IF IT IS NOT SET CORRECTLY.. */ + cache->cache_index = index; if ( clazz->init_cache ) error = clazz->init_cache( cache ); diff --git a/src/cache/ftcsbits.c b/src/cache/ftcsbits.c index 281b48bfb..93d8fdb42 100644 --- a/src/cache/ftcsbits.c +++ b/src/cache/ftcsbits.c @@ -262,7 +262,7 @@ /* lookup the FT_Face to obtain the number of glyphs */ error = FTC_Manager_Lookup_Face( cset->manager, - &desc->font, &face ); + desc->font.face_id, &face ); if (!error) cset->element_max = face->num_glyphs; @@ -290,7 +290,7 @@ FT_CPLUSPLUS( const FTC_ChunkSet_Class ) ftc_sbit_chunk_set_class = { - sizeof( FTC_ImageSetRec ), + sizeof( FTC_SBitSetRec ), (FTC_ChunkSet_InitFunc) ftc_sbit_chunk_set_init, (FTC_ChunkSet_DoneFunc) 0, @@ -381,13 +381,7 @@ FTC_ChunkNode_Unref ( node ); } - sbit = ((FTC_SBit)((FTC_ChunkNode)node)->elements) + cindex; - if (sbit->buffer == 0) - { - /* the glyph was missing, we return a NULL pointer !! */ - sbit = 0; - } - + sbit = ((FTC_SBit)((FTC_ChunkNode)node)->elements) + cindex; *asbit = sbit; Exit: diff --git a/src/cache/rules.mk b/src/cache/rules.mk index 8cdf1f6e2..000dc95e8 100644 --- a/src/cache/rules.mk +++ b/src/cache/rules.mk @@ -31,6 +31,8 @@ Cache_COMPILE := $(FT_COMPILE) Cache_DRV_SRC := $(CACHE_DIR_)ftlru.c \ $(CACHE_DIR_)ftcmanag.c \ $(CACHE_DIR_)ftcglyph.c \ + $(CACHE_DIR_)ftcchunk.c \ + $(CACHE_DIR_)ftcsbits.c \ $(CACHE_DIR_)ftcimage.c # Cache driver headers