Commit ca90a2c46b4241d22c1626c94c16cc82b3d0d255

David Turner 2001-07-06T13:52:36

* include/internal/ftstream.h: modified the definitions of the FT_GET_XXXX and NEXT_XXXX macros for 16-bit correctness

diff --git a/ChangeLog b/ChangeLog
index 2e87d72..44b7014 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 <david@freetype.org>
+
+	* 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  <wl@gnu.org>
 
 	* 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 c7b536d..3512f4a 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_OFF3_BE( p )                            \
-          ( (long) ( ( (signed char)(p)[0] << 16 ) |   \
-                                  ( (p)[1] <<  8 ) |   \
-                                    (p)[2]         ) )
-
-#define FT_GET_LONG_BE( p )                            \
-          ( (long) ( ( (signed char)(p)[0] << 24 ) |   \
-                                  ( (p)[1] << 16 ) |   \
-                                  ( (p)[2] <<  8 ) |   \
-                                    (p)[3]         ) )
-
-#define FT_GET_SHORT_LE( p )                           \
-          ( (short)( ( (signed char)(p)[1] <<  8 ) |   \
-                                    (p)[0]         ) )
-
-#define FT_GET_OFF3_LE( p )                            \
-          ( (long) ( ( (signed char)(p)[2] << 16 ) |   \
-                                  ( (p)[1] <<  8 ) |   \
-                                    (p)[0]         ) )
-
-#define FT_GET_LONG_LE( p )                            \
-          ( (long) ( ( (signed char)(p)[3] << 24 ) |   \
-                                  ( (p)[2] << 16 ) |   \
-                                  ( (p)[1] <<  8 ) |   \
-                                    (p)[0]         ) )
+#define FT_GET_SHORT_BE( p )                                   \
+          ((FT_Int16)( ( (FT_Int16)(FT_Char)(p)[0] <<  8 ) |   \
+                         (FT_Int16)(FT_Byte)(p)[1]         ) )
+
+#define FT_GET_USHORT_BE( p )                                   \
+          ((FT_Int16)( ( (FT_UInt16)(FT_Byte)(p)[0] <<  8 ) |   \
+                         (FT_UInt16)(FT_Byte)(p)[1]         ) )
+
+#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_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_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 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 ) ) )
 
 
   /*************************************************************************/