diff --git a/ChangeLog b/ChangeLog index 251da08ad..fc484fafb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2015-12-20 Werner Lemberg + + [base, bdf] Don't expose `FT_Hashnode' in hash functions. + + * src/base/fthash.c (hash_lookup, ft_hash_str_lookup, + ft_hash_num_lookup): Return pointer to `size_t' instead of + `FT_Hashnode'. + + * include/freetype/internal/fthash.h: Updated. + + * src/bdf/bdflib.c (bdf_get_property, _bdf_add_property, + bdf_get_font_property): Updated. + 2015-12-20 Werner Lemberg [base, bdf] Add number hashing. diff --git a/include/freetype/internal/fthash.h b/include/freetype/internal/fthash.h index 84563cb8c..7867e12e4 100644 --- a/include/freetype/internal/fthash.h +++ b/include/freetype/internal/fthash.h @@ -118,11 +118,11 @@ FT_BEGIN_HEADER FT_Hash hash, FT_Memory memory ); - FT_Hashnode + size_t* ft_hash_str_lookup( const char* key, FT_Hash hash ); - FT_Hashnode + size_t* ft_hash_num_lookup( FT_Int num, FT_Hash hash ); diff --git a/src/base/fthash.c b/src/base/fthash.c index 942e6500b..854741ab1 100644 --- a/src/base/fthash.c +++ b/src/base/fthash.c @@ -291,18 +291,19 @@ } - static FT_Hashnode + static size_t* hash_lookup( FT_Hashkey key, FT_Hash hash ) { FT_Hashnode* np = hash_bucket( key, hash ); - return *np; + return (*np) ? &(*np)->data + : NULL; } - FT_Hashnode + size_t* ft_hash_str_lookup( const char* key, FT_Hash hash ) { @@ -315,7 +316,7 @@ } - FT_Hashnode + size_t* ft_hash_num_lookup( FT_Int num, FT_Hash hash ) { diff --git a/src/bdf/bdflib.c b/src/bdf/bdflib.c index 694446750..cef52c4c4 100644 --- a/src/bdf/bdflib.c +++ b/src/bdf/bdflib.c @@ -848,25 +848,23 @@ } - FT_LOCAL_DEF( bdf_property_t * ) + FT_LOCAL_DEF( bdf_property_t* ) bdf_get_property( char* name, bdf_font_t* font ) { - FT_Hashnode hn; - size_t propid; + size_t* propid; if ( name == 0 || *name == 0 ) return 0; - if ( ( hn = ft_hash_str_lookup( name, &(font->proptbl) ) ) == 0 ) + if ( ( propid = ft_hash_str_lookup( name, &(font->proptbl) ) ) == NULL ) return 0; - propid = hn->data; - if ( propid >= _num_bdf_properties ) - return font->user_props + ( propid - _num_bdf_properties ); + if ( *propid >= _num_bdf_properties ) + return font->user_props + ( *propid - _num_bdf_properties ); - return (bdf_property_t*)_bdf_properties + propid; + return (bdf_property_t*)_bdf_properties + *propid; } @@ -1074,8 +1072,7 @@ char* value, unsigned long lineno ) { - size_t propid; - FT_Hashnode hn; + size_t* propid; bdf_property_t *prop, *fp; FT_Memory memory = font->memory; FT_Error error = FT_Err_Ok; @@ -1084,11 +1081,12 @@ /* First, check whether the property already exists in the font. */ - if ( ( hn = ft_hash_str_lookup( name, (FT_Hash)font->internal ) ) != 0 ) + if ( ( propid = ft_hash_str_lookup( name, + (FT_Hash)font->internal ) ) != NULL ) { /* The property already exists in the font, so simply replace */ /* the value of the property with the current value. */ - fp = font->props + hn->data; + fp = font->props + *propid; switch ( fp->format ) { @@ -1120,13 +1118,13 @@ /* See whether this property type exists yet or not. */ /* If not, create it. */ - hn = ft_hash_str_lookup( name, &(font->proptbl) ); - if ( hn == 0 ) + propid = ft_hash_str_lookup( name, &(font->proptbl) ); + if ( propid == NULL ) { error = bdf_create_property( name, BDF_ATOM, font ); if ( error ) goto Exit; - hn = ft_hash_str_lookup( name, &(font->proptbl) ); + propid = ft_hash_str_lookup( name, &(font->proptbl) ); } /* Allocate another property if this is overflow. */ @@ -1150,11 +1148,10 @@ font->props_size++; } - propid = hn->data; - if ( propid >= _num_bdf_properties ) - prop = font->user_props + ( propid - _num_bdf_properties ); + if ( *propid >= _num_bdf_properties ) + prop = font->user_props + ( *propid - _num_bdf_properties ); else - prop = (bdf_property_t*)_bdf_properties + propid; + prop = (bdf_property_t*)_bdf_properties + *propid; fp = font->props + font->props_used; @@ -2408,15 +2405,15 @@ bdf_get_font_property( bdf_font_t* font, const char* name ) { - FT_Hashnode hn; + size_t* propid; if ( font == 0 || font->props_size == 0 || name == 0 || *name == 0 ) return 0; - hn = ft_hash_str_lookup( name, (FT_Hash)font->internal ); + propid = ft_hash_str_lookup( name, (FT_Hash)font->internal ); - return hn ? ( font->props + hn->data ) : 0; + return propid ? ( font->props + *propid ) : 0; }