fixed a few 64-bit related bugs in "sfnt/ttload.c" and

"base/ftstream.c"

Note that "TT_PCLT" was incorrectly defined in
<freetype/tttables.h>
This commit is contained in:
David Turner 2000-07-03 15:00:49 +00:00
parent 768c9561f6
commit d18388e44b
5 changed files with 39 additions and 17 deletions

View File

@ -22,6 +22,7 @@
#define FT_FRAME_OP_SHORT 3 /* read 2-byte value */
#define FT_FRAME_OP_LONG 4 /* read 4-byte value */
#define FT_FRAME_OP_OFF3 5 /* read 3-byte value */
#define FT_FRAME_OP_BYTES 6 /* read a bytes sequence */
typedef enum FT_Frame_Op_
{
@ -44,7 +45,9 @@ typedef enum FT_Frame_Op_
ft_frame_uoff3_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 0 ),
ft_frame_uoff3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 1 ),
ft_frame_off3_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 0 ),
ft_frame_off3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 1 )
ft_frame_off3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 1 ),
ft_frame_bytes = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 0 )
} FT_Frame_Op;
@ -87,6 +90,13 @@ typedef struct FT_Frame_Field_
#define FT_FRAME_SKIP_SHORT { ft_frame_short_be, 0, 0 }
#define FT_FRAME_SKIP_BYTE { ft_frame_byte, 0, 0 }
#define FT_FRAME_BYTES( struct_type, field, count ) \
{ \
ft_frame_bytes, \
count, \
(FT_UShort)(char*)&FT_FIELD_REF(struct_type,field) }
/*************************************************************************/
/* */

View File

@ -418,7 +418,7 @@
FT_Char TypeFace[16];
FT_Char CharacterComplement[8];
FT_Char FileName[6];
FT_Char StrokeWeight[6];
FT_Char StrokeWeight;
FT_Char WidthType;
FT_Byte SerifStyle;
FT_Byte Reserved;

View File

@ -561,7 +561,6 @@
/* <Note> */
/* The 2x2 transformation matrix is also applied to the glyph's */
/* advance vector. */
/* */
FT_EXPORT_FUNC( FT_Error ) FT_Glyph_Transform( FT_Glyph glyph,
FT_Matrix* matrix,
FT_Vector* delta )

View File

@ -539,6 +539,21 @@
fields++;
continue; /* loop! */
case ft_frame_bytes: /* read a byte sequence */
{
FT_Int len = stream->limit - stream->cursor;
if (len > fields->size)
len = fields->size;
p = (FT_Byte*)structure + fields->offset;
MEM_Copy( p, stream->cursor, len );
stream->cursor += len;
fields++;
continue;
}
case ft_frame_byte:
case ft_frame_schar: /* read a single byte */
value = GET_Byte();
@ -611,13 +626,12 @@
value = 0;
p = stream->cursor;
if ( p + 3 < stream->limit )
if ( p + 2 < stream->limit )
{
value = (FT_ULong)p[0] |
( (FT_ULong)p[1] << 8 ) |
( (FT_ULong)p[2] << 16 ) |
( (FT_ULong)p[3] << 24 );
stream->cursor += 4;
( (FT_ULong)p[2] << 16 );
stream->cursor += 3;
}
sign_shift = 8;
break;

View File

@ -1330,7 +1330,7 @@
{
static const FT_Frame_Field pclt_fields[] =
{
FT_FRAME_START( 20 ),
FT_FRAME_START( 54 ),
FT_FRAME_ULONG ( TT_PCLT, Version ),
FT_FRAME_ULONG ( TT_PCLT, FontNumber ),
FT_FRAME_USHORT( TT_PCLT, Pitch ),
@ -1338,16 +1338,19 @@
FT_FRAME_USHORT( TT_PCLT, Style ),
FT_FRAME_USHORT( TT_PCLT, TypeFamily ),
FT_FRAME_USHORT( TT_PCLT, CapHeight ),
FT_FRAME_BYTES ( TT_PCLT, TypeFace, 16 ),
FT_FRAME_BYTES ( TT_PCLT, CharacterComplement, 8 ),
FT_FRAME_BYTES ( TT_PCLT, FileName, 6 ),
FT_FRAME_CHAR ( TT_PCLT, StrokeWeight ),
FT_FRAME_CHAR ( TT_PCLT, WidthType ),
FT_FRAME_BYTE ( TT_PCLT, SerifStyle ),
FT_FRAME_BYTE ( TT_PCLT, Reserved ),
FT_FRAME_END
};
static const FT_Frame_Field pclt_fields2[] =
{
FT_FRAME_START( 4 ),
FT_FRAME_CHAR( TT_PCLT, StrokeWeight ),
FT_FRAME_CHAR( TT_PCLT, WidthType ),
FT_FRAME_BYTE( TT_PCLT, SerifStyle ),
FT_FRAME_BYTE( TT_PCLT, Reserved ),
FT_FRAME_END
};
@ -1366,11 +1369,7 @@
return TT_Err_Ok;
}
if ( READ_Fields( pclt_fields, pclt ) ||
FILE_Read ( pclt->TypeFace, 16 ) ||
FILE_Read ( pclt->CharacterComplement, 8 ) ||
FILE_Read ( pclt->FileName, 6 ) ||
READ_Fields( pclt_fields2, pclt ) )
if ( READ_Fields( pclt_fields, pclt ) )
goto Exit;
FT_TRACE2(( "loaded\n" ));