* src/bdf/bdfdrivr.c: Clean up interface.
Ensure that all driver functions use the signature of the service or driver. This avoids pointer mismatches, which are technically undefined behaviour. Recent compilers are more picky in catching them as part of Control Flow Integrity tests.
This commit is contained in:
parent
c041411917
commit
bc7466ad45
@ -311,9 +311,9 @@ THE SOFTWARE.
|
||||
|
||||
|
||||
FT_CALLBACK_DEF( void )
|
||||
BDF_Face_Done( FT_Face bdfface ) /* BDF_Face */
|
||||
BDF_Face_Done( FT_Face face ) /* BDF_Face */
|
||||
{
|
||||
BDF_Face face = (BDF_Face)bdfface;
|
||||
BDF_Face bdfface = (BDF_Face)face;
|
||||
FT_Memory memory;
|
||||
|
||||
|
||||
@ -322,31 +322,31 @@ THE SOFTWARE.
|
||||
|
||||
memory = FT_FACE_MEMORY( face );
|
||||
|
||||
bdf_free_font( face->bdffont );
|
||||
bdf_free_font( bdfface->bdffont );
|
||||
|
||||
FT_FREE( face->en_table );
|
||||
FT_FREE( bdfface->en_table );
|
||||
|
||||
FT_FREE( face->charset_encoding );
|
||||
FT_FREE( face->charset_registry );
|
||||
FT_FREE( bdfface->family_name );
|
||||
FT_FREE( bdfface->style_name );
|
||||
FT_FREE( bdfface->charset_encoding );
|
||||
FT_FREE( bdfface->charset_registry );
|
||||
FT_FREE( face->family_name );
|
||||
FT_FREE( face->style_name );
|
||||
|
||||
FT_FREE( bdfface->available_sizes );
|
||||
FT_FREE( face->available_sizes );
|
||||
|
||||
FT_FREE( face->bdffont );
|
||||
FT_FREE( bdfface->bdffont );
|
||||
}
|
||||
|
||||
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
BDF_Face_Init( FT_Stream stream,
|
||||
FT_Face bdfface, /* BDF_Face */
|
||||
FT_Face face, /* BDF_Face */
|
||||
FT_Int face_index,
|
||||
FT_Int num_params,
|
||||
FT_Parameter* params )
|
||||
{
|
||||
FT_Error error = FT_Err_Ok;
|
||||
BDF_Face face = (BDF_Face)bdfface;
|
||||
FT_Memory memory = FT_FACE_MEMORY( face );
|
||||
FT_Error error = FT_Err_Ok;
|
||||
BDF_Face bdfface = (BDF_Face)face;
|
||||
FT_Memory memory = FT_FACE_MEMORY( face );
|
||||
|
||||
bdf_font_t* font = NULL;
|
||||
bdf_options_t options;
|
||||
@ -375,7 +375,7 @@ THE SOFTWARE.
|
||||
goto Exit;
|
||||
|
||||
/* we have a bdf font: let's construct the face object */
|
||||
face->bdffont = font;
|
||||
bdfface->bdffont = font;
|
||||
|
||||
/* BDF cannot have multiple faces in a single font file.
|
||||
* XXX: non-zero face_index is already invalid argument, but
|
||||
@ -386,7 +386,7 @@ THE SOFTWARE.
|
||||
if ( face_index > 0 && ( face_index & 0xFFFF ) > 0 )
|
||||
{
|
||||
FT_ERROR(( "BDF_Face_Init: invalid face index\n" ));
|
||||
BDF_Face_Done( bdfface );
|
||||
BDF_Face_Done( face );
|
||||
return FT_THROW( Invalid_Argument );
|
||||
}
|
||||
|
||||
@ -401,18 +401,18 @@ THE SOFTWARE.
|
||||
font->unencoded_size,
|
||||
font->unencoded_used ));
|
||||
|
||||
bdfface->num_faces = 1;
|
||||
bdfface->face_index = 0;
|
||||
face->num_faces = 1;
|
||||
face->face_index = 0;
|
||||
|
||||
bdfface->face_flags |= FT_FACE_FLAG_FIXED_SIZES |
|
||||
FT_FACE_FLAG_HORIZONTAL;
|
||||
face->face_flags |= FT_FACE_FLAG_FIXED_SIZES |
|
||||
FT_FACE_FLAG_HORIZONTAL;
|
||||
|
||||
prop = bdf_get_font_property( font, "SPACING" );
|
||||
if ( prop && prop->format == BDF_ATOM &&
|
||||
prop->value.atom &&
|
||||
( *(prop->value.atom) == 'M' || *(prop->value.atom) == 'm' ||
|
||||
*(prop->value.atom) == 'C' || *(prop->value.atom) == 'c' ) )
|
||||
bdfface->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
|
||||
face->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
|
||||
|
||||
/* FZ XXX: TO DO: FT_FACE_FLAGS_VERTICAL */
|
||||
/* FZ XXX: I need a font to implement this */
|
||||
@ -420,26 +420,27 @@ THE SOFTWARE.
|
||||
prop = bdf_get_font_property( font, "FAMILY_NAME" );
|
||||
if ( prop && prop->value.atom )
|
||||
{
|
||||
if ( FT_STRDUP( bdfface->family_name, prop->value.atom ) )
|
||||
if ( FT_STRDUP( face->family_name, prop->value.atom ) )
|
||||
goto Exit;
|
||||
}
|
||||
else
|
||||
bdfface->family_name = NULL;
|
||||
face->family_name = NULL;
|
||||
|
||||
if ( FT_SET_ERROR( bdf_interpret_style( face ) ) )
|
||||
if ( FT_SET_ERROR( bdf_interpret_style( bdfface ) ) )
|
||||
goto Exit;
|
||||
|
||||
/* the number of glyphs (with one slot for the undefined glyph */
|
||||
/* at position 0 and all unencoded glyphs) */
|
||||
bdfface->num_glyphs = (FT_Long)( font->glyphs_size + 1 );
|
||||
face->num_glyphs = (FT_Long)( font->glyphs_size + 1 );
|
||||
|
||||
bdfface->num_fixed_sizes = 1;
|
||||
if ( FT_NEW( bdfface->available_sizes ) )
|
||||
face->num_fixed_sizes = 1;
|
||||
if ( FT_NEW( face->available_sizes ) )
|
||||
goto Exit;
|
||||
|
||||
{
|
||||
FT_Bitmap_Size* bsize = bdfface->available_sizes;
|
||||
FT_Short resolution_x = 0, resolution_y = 0;
|
||||
FT_Bitmap_Size* bsize = face->available_sizes;
|
||||
FT_Short resolution_x = 0;
|
||||
FT_Short resolution_y = 0;
|
||||
long value;
|
||||
|
||||
|
||||
@ -598,20 +599,20 @@ THE SOFTWARE.
|
||||
unsigned long n;
|
||||
|
||||
|
||||
if ( FT_QNEW_ARRAY( face->en_table, font->glyphs_size ) )
|
||||
if ( FT_QNEW_ARRAY( bdfface->en_table, font->glyphs_size ) )
|
||||
goto Exit;
|
||||
|
||||
face->default_glyph = 0;
|
||||
bdfface->default_glyph = 0;
|
||||
for ( n = 0; n < font->glyphs_size; n++ )
|
||||
{
|
||||
(face->en_table[n]).enc = cur[n].encoding;
|
||||
(bdfface->en_table[n]).enc = cur[n].encoding;
|
||||
FT_TRACE4(( " idx %ld, val 0x%lX\n", n, cur[n].encoding ));
|
||||
(face->en_table[n]).glyph = (FT_UShort)n;
|
||||
(bdfface->en_table[n]).glyph = (FT_UShort)n;
|
||||
|
||||
if ( cur[n].encoding == font->default_char )
|
||||
{
|
||||
if ( n < FT_UINT_MAX )
|
||||
face->default_glyph = (FT_UInt)n;
|
||||
bdfface->default_glyph = (FT_UInt)n;
|
||||
else
|
||||
FT_TRACE1(( "BDF_Face_Init:"
|
||||
" idx %ld is too large for this system\n", n ));
|
||||
@ -639,27 +640,27 @@ THE SOFTWARE.
|
||||
const char* s;
|
||||
|
||||
|
||||
if ( FT_STRDUP( face->charset_encoding,
|
||||
if ( FT_STRDUP( bdfface->charset_encoding,
|
||||
charset_encoding->value.atom ) ||
|
||||
FT_STRDUP( face->charset_registry,
|
||||
FT_STRDUP( bdfface->charset_registry,
|
||||
charset_registry->value.atom ) )
|
||||
goto Exit;
|
||||
|
||||
/* Uh, oh, compare first letters manually to avoid dependency */
|
||||
/* on locales. */
|
||||
s = face->charset_registry;
|
||||
s = bdfface->charset_registry;
|
||||
if ( ( s[0] == 'i' || s[0] == 'I' ) &&
|
||||
( s[1] == 's' || s[1] == 'S' ) &&
|
||||
( s[2] == 'o' || s[2] == 'O' ) )
|
||||
{
|
||||
s += 3;
|
||||
if ( !ft_strcmp( s, "10646" ) ||
|
||||
( !ft_strcmp( s, "8859" ) &&
|
||||
!ft_strcmp( face->charset_encoding, "1" ) ) )
|
||||
if ( !ft_strcmp( s, "10646" ) ||
|
||||
( !ft_strcmp( s, "8859" ) &&
|
||||
!ft_strcmp( bdfface->charset_encoding, "1" ) ) )
|
||||
unicode_charmap = 1;
|
||||
/* another name for ASCII */
|
||||
else if ( !ft_strcmp( s, "646.1991" ) &&
|
||||
!ft_strcmp( face->charset_encoding, "IRV" ) )
|
||||
else if ( !ft_strcmp( s, "646.1991" ) &&
|
||||
!ft_strcmp( bdfface->charset_encoding, "IRV" ) )
|
||||
unicode_charmap = 1;
|
||||
}
|
||||
|
||||
@ -667,7 +668,7 @@ THE SOFTWARE.
|
||||
FT_CharMapRec charmap;
|
||||
|
||||
|
||||
charmap.face = FT_FACE( face );
|
||||
charmap.face = face;
|
||||
charmap.encoding = FT_ENCODING_NONE;
|
||||
/* initial platform/encoding should indicate unset status? */
|
||||
charmap.platform_id = TT_PLATFORM_APPLE_UNICODE;
|
||||
@ -693,7 +694,7 @@ THE SOFTWARE.
|
||||
FT_CharMapRec charmap;
|
||||
|
||||
|
||||
charmap.face = FT_FACE( face );
|
||||
charmap.face = face;
|
||||
charmap.encoding = FT_ENCODING_ADOBE_STANDARD;
|
||||
charmap.platform_id = TT_PLATFORM_ADOBE;
|
||||
charmap.encoding_id = TT_ADOBE_ID_STANDARD;
|
||||
@ -701,8 +702,8 @@ THE SOFTWARE.
|
||||
error = FT_CMap_New( &bdf_cmap_class, NULL, &charmap, NULL );
|
||||
|
||||
/* Select default charmap */
|
||||
if ( bdfface->num_charmaps )
|
||||
bdfface->charmap = bdfface->charmaps[0];
|
||||
if ( face->num_charmaps )
|
||||
face->charmap = face->charmaps[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -711,7 +712,7 @@ THE SOFTWARE.
|
||||
return error;
|
||||
|
||||
Fail:
|
||||
BDF_Face_Done( bdfface );
|
||||
BDF_Face_Done( face );
|
||||
return FT_THROW( Unknown_File_Format );
|
||||
}
|
||||
|
||||
@ -868,17 +869,18 @@ THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
static FT_Error
|
||||
bdf_get_bdf_property( BDF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
bdf_get_bdf_property( FT_Face face, /* BDF_Face */
|
||||
const char* prop_name,
|
||||
BDF_PropertyRec *aproperty )
|
||||
{
|
||||
BDF_Face bdfface = (BDF_Face)face;
|
||||
bdf_property_t* prop;
|
||||
|
||||
|
||||
FT_ASSERT( face && face->bdffont );
|
||||
FT_ASSERT( bdfface && bdfface->bdffont );
|
||||
|
||||
prop = bdf_get_font_property( face->bdffont, prop_name );
|
||||
prop = bdf_get_font_property( bdfface->bdffont, prop_name );
|
||||
if ( prop )
|
||||
{
|
||||
switch ( prop->format )
|
||||
@ -921,13 +923,16 @@ THE SOFTWARE.
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
bdf_get_charset_id( BDF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
bdf_get_charset_id( FT_Face face, /* BDF_Face */
|
||||
const char* *acharset_encoding,
|
||||
const char* *acharset_registry )
|
||||
{
|
||||
*acharset_encoding = face->charset_encoding;
|
||||
*acharset_registry = face->charset_registry;
|
||||
BDF_Face bdfface = (BDF_Face)face;
|
||||
|
||||
|
||||
*acharset_encoding = bdfface->charset_encoding;
|
||||
*acharset_registry = bdfface->charset_registry;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -964,7 +969,6 @@ THE SOFTWARE.
|
||||
}
|
||||
|
||||
|
||||
|
||||
FT_CALLBACK_TABLE_DEF
|
||||
const FT_Driver_ClassRec bdf_driver_class =
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user