* src/cache/ftccmap.c: trying to hack binary compatibility for

gnustep-back (GNUstep backend module) which still crashes under
    Sarge.
This commit is contained in:
David Turner 2006-02-23 22:35:26 +00:00
parent d4303da035
commit 88d8985a99
2 changed files with 71 additions and 4 deletions

View File

@ -6,6 +6,10 @@
glyphs.
Fix a problem with large encodings.
* src/cache/ftccmap.c: trying to hack binary compatibility for
gnustep-back (GNUstep backend module) which still crashes under
Sarge.
2006-02-23 Chia-I Wu <b90201047@ntu.edu.tw>
* include/freetype/ftoutln.h (enum FT_Orientation): New value
@ -44,7 +48,7 @@
The FT_Get_Module_Flags API was removed consequently.
* include/freetype/ftmodapi.h (FT_Module_Get_Flags): Removed.
* include/freetype/ftmodapi.h (FT_Module_Get_Flags): Removed.
Replaced with...
(FT_Get_TrueType_Engine_Type): This.
(FT_TrueTypeEngineType): New enumeration.

69
src/cache/ftccmap.c vendored
View File

@ -31,6 +31,42 @@
#define FT_COMPONENT trace_cache
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
typedef enum FTC_OldCMapType_
{
FTC_OLD_CMAP_BY_INDEX = 0,
FTC_OLD_CMAP_BY_ENCODING = 1,
FTC_OLD_CMAP_BY_ID = 2
} FTC_OldCMapType;
typedef struct FTC_OldCMapIdRec_
{
FT_UInt platform;
FT_UInt encoding;
} FTC_OldCMapIdRec, *FTC_OldCMapId;
typedef struct FTC_OldCMapDescRec_
{
FTC_FaceID face_id;
FTC_OldCMapType type;
union
{
FT_UInt index;
FT_Encoding encoding;
FTC_OldCMapIdRec id;
} u;
} FTC_OldCMapDescRec, *FTC_OldCMapDesc;
#endif /* FT_CONFIG_OLD_INTERNALS */
/*************************************************************************/
/* */
/* Each FTC_CMapNode contains a simple array to map a range of character */
@ -261,9 +297,36 @@
return 0;
}
query.face_id = face_id;
query.cmap_index = (FT_UInt)cmap_index;
query.char_code = char_code;
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
/* detect a call from a rogue client that thinks it is linking
* to FreeType 2.1.7. This is possible because the third parameter
* is then a character code, and we've never seen any font with
* more than a few charmaps, so if the index is very large...
*/
if ( cmap_index >= 4 )
{
FTC_OldCMapDesc desc = (FTC_OldCMapDesc) face_id;
query.face_id = desc->face_id;
switch ( desc->type )
{
case FTC_OLD_CMAP_BY_INDEX:
query.cmap_index = desc->u.index;
query.char_code = (FT_UInt32)cmap_index;
break;
default:
return FT_Err_Unimplemented_Feature;
}
}
else
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
{
query.face_id = face_id;
query.cmap_index = (FT_UInt)cmap_index;
query.char_code = char_code;
}
hash = FTC_CMAP_HASH( face_id, cmap_index, char_code );