From ada139f474ee98d7fc24fe9bfbfbc5fb3ab4c781 Mon Sep 17 00:00:00 2001 From: David Turner Date: Fri, 6 Jul 2001 13:52:36 +0000 Subject: [PATCH] * include/internal/ftstream.h: modified the definitions of the FT_GET_XXXX and NEXT_XXXX macros for 16-bit correctness --- ChangeLog | 5 ++ include/freetype/internal/ftstream.h | 91 +++++++++++++++++++--------- 2 files changed, 66 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2e87d72fe..44b701419 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,11 @@ * src/psaux/psobjs.c (T1_Decrypt): Ditto. * src/type1/t1parse.c (T1_Get_Private_Dict): Ditto. +2001-06-28 David Turner + + * include/internal/ftstream.h: modified the definitions + of the FT_GET_XXXX and NEXT_XXXX macros for 16-bit correctness + 2001-06-26 Werner Lemberg * src/cid/cidload.c, src/cid/cidload.h (cid_decrypt): Use FT_Offset diff --git a/include/freetype/internal/ftstream.h b/include/freetype/internal/ftstream.h index c7b536d57..3512f4a5d 100644 --- a/include/freetype/internal/ftstream.h +++ b/include/freetype/internal/ftstream.h @@ -144,35 +144,66 @@ FT_BEGIN_HEADER /* type `char*' or equivalent (1-byte elements). */ /* */ -#define FT_GET_SHORT_BE( p ) \ - ( (short)( ( (signed char)(p)[0] << 8 ) | \ - (p)[1] ) ) +#define FT_GET_SHORT_BE( p ) \ + ((FT_Int16)( ( (FT_Int16)(FT_Char)(p)[0] << 8 ) | \ + (FT_Int16)(FT_Byte)(p)[1] ) ) -#define FT_GET_OFF3_BE( p ) \ - ( (long) ( ( (signed char)(p)[0] << 16 ) | \ - ( (p)[1] << 8 ) | \ - (p)[2] ) ) +#define FT_GET_USHORT_BE( p ) \ + ((FT_Int16)( ( (FT_UInt16)(FT_Byte)(p)[0] << 8 ) | \ + (FT_UInt16)(FT_Byte)(p)[1] ) ) -#define FT_GET_LONG_BE( p ) \ - ( (long) ( ( (signed char)(p)[0] << 24 ) | \ - ( (p)[1] << 16 ) | \ - ( (p)[2] << 8 ) | \ - (p)[3] ) ) +#define FT_GET_OFF3_BE( p ) \ + ( (FT_Int32) ( ( (FT_Int32)(FT_Char)(p)[0] << 16 ) | \ + ( (FT_Int32)(FT_Byte)(p)[1] << 8 ) | \ + (FT_Int32)(FT_Byte)(p)[2] ) ) -#define FT_GET_SHORT_LE( p ) \ - ( (short)( ( (signed char)(p)[1] << 8 ) | \ - (p)[0] ) ) +#define FT_GET_UOFF3_BE( p ) \ + ( (FT_Int32) ( ( (FT_UInt32)(FT_Byte)(p)[0] << 16 ) | \ + ( (FT_UInt32)(FT_Byte)(p)[1] << 8 ) | \ + (FT_UInt32)(FT_Byte)(p)[2] ) ) -#define FT_GET_OFF3_LE( p ) \ - ( (long) ( ( (signed char)(p)[2] << 16 ) | \ - ( (p)[1] << 8 ) | \ - (p)[0] ) ) +#define FT_GET_LONG_BE( p ) \ + ( (FT_Int32) ( ( (FT_Int32)(FT_Char)(p)[0] << 24 ) | \ + ( (FT_Int32)(FT_Byte)(p)[1] << 16 ) | \ + ( (FT_Int32)(FT_Byte)(p)[2] << 8 ) | \ + (FT_Int32)(FT_Byte)(p)[3] ) ) + +#define FT_GET_ULONG_BE( p ) \ + ( (FT_Int32) ( ( (FT_UInt32)(FT_Byte)(p)[0] << 24 ) | \ + ( (FT_UInt32)(FT_Byte)(p)[1] << 16 ) | \ + ( (FT_UInt32)(FT_Byte)(p)[2] << 8 ) | \ + (FT_UInt32)(FT_Byte)(p)[3] ) ) + +#define FT_GET_SHORT_LE( p ) \ + ((FT_Int16)( ( (FT_Int16)(FT_Char)(p)[1] << 8 ) | \ + (FT_Int16)(FT_Byte)(p)[0] ) ) + +#define FT_GET_USHORT_LE( p ) \ + ((FT_Int16)( ( (FT_UInt16)(FT_Byte)(p)[1] << 8 ) | \ + (FT_UInt16)(FT_Byte)(p)[0] ) ) + +#define FT_GET_OFF3_LE( p ) \ + ( (FT_Int32) ( ( (FT_Int32)(FT_Char)(p)[2] << 16 ) | \ + ( (FT_Int32)(FT_Byte)(p)[1] << 8 ) | \ + (FT_Int32)(FT_Byte)(p)[0] ) ) + +#define FT_GET_UOFF3_LE( p ) \ + ( (FT_Int32) ( ( (FT_UInt32)(FT_Byte)(p)[2] << 16 ) | \ + ( (FT_UInt32)(FT_Byte)(p)[1] << 8 ) | \ + (FT_UInt32)(FT_Byte)(p)[0] ) ) + +#define FT_GET_LONG_LE( p ) \ + ( (FT_Int32) ( ( (FT_Int32)(FT_Char)(p)[3] << 24 ) | \ + ( (FT_Int32)(FT_Byte)(p)[2] << 16 ) | \ + ( (FT_Int32)(FT_Byte)(p)[1] << 8 ) | \ + (FT_Int32)(FT_Byte)(p)[0] ) ) + +#define FT_GET_ULONG_LE( p ) \ + ( (FT_Int32) ( ( (FT_UInt32)(FT_Byte)(p)[3] << 24 ) | \ + ( (FT_UInt32)(FT_Byte)(p)[2] << 16 ) | \ + ( (FT_UInt32)(FT_Byte)(p)[1] << 8 ) | \ + (FT_UInt32)(FT_Byte)(p)[0] ) ) -#define FT_GET_LONG_LE( p ) \ - ( (long) ( ( (signed char)(p)[3] << 24 ) | \ - ( (p)[2] << 16 ) | \ - ( (p)[1] << 8 ) | \ - (p)[0] ) ) #define NEXT_Char( buffer ) \ ( (signed char)*buffer++ ) @@ -184,39 +215,39 @@ FT_BEGIN_HEADER ( (short)( buffer += 2, FT_GET_SHORT_BE( buffer - 2 ) ) ) #define NEXT_UShort( buffer ) \ - ( (unsigned short)NEXT_Short( buffer ) ) + ( (unsigned short)( buffer += 2, FT_GET_USHORT_BE( buffer - 2 ) ) ) #define NEXT_Offset( buffer ) \ ( (long)( buffer += 3, FT_GET_OFF3_BE( buffer - 3 ) ) ) #define NEXT_UOffset( buffer ) \ - ( (unsigned long)NEXT_Offset( buffer ) ) + ( (unsigned long)( buffer += 3, FT_GET_UOFF3_BE( buffer - 3 ) ) ) #define NEXT_Long( buffer ) \ ( (long)( buffer += 4, FT_GET_LONG_BE( buffer - 4 ) ) ) #define NEXT_ULong( buffer ) \ - ( (unsigned long)NEXT_Long( buffer ) ) + ( (unsigned long)( buffer += 4, FT_GET_ULONG_BE( buffer - 4 ) ) ) #define NEXT_ShortLE( buffer ) \ ( (short)( buffer += 2, FT_GET_SHORT_LE( buffer - 2 ) ) ) #define NEXT_UShortLE( buffer ) \ - ( (unsigned short)NEXT_ShortLE( buffer ) ) + ( (unsigned short)( buffer += 2, FT_GET_USHORT_LE( buffer - 2 ) ) ) #define NEXT_OffsetLE( buffer ) \ ( (long)( buffer += 3, FT_GET_OFF3_LE( buffer - 3 ) ) ) #define NEXT_UOffsetLE( buffer ) \ - ( (unsigned long)NEXT_OffsetLE( buffer ) ) + ( (unsigned long)( buffer += 3, FT_GET_UOFF3_LE( buffer - 3 ) ) ) #define NEXT_LongLE( buffer ) \ ( (long)( buffer += 4, FT_GET_LONG_LE( buffer - 4 ) ) ) #define NEXT_ULongLE( buffer ) \ - ( (unsigned long)NEXT_LongLE( buffer ) ) + ( (unsigned long)( buffer += 4, FT_GET_ULONG_LE( buffer - 4 ) ) ) /*************************************************************************/