X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=src%2Ffcfreetype.c;h=f85e2f8931eae1bc8b2305829ce355a9e6a08c37;hb=5b8e43a48ea1a5fb4e54dd12fe965439df2bf95d;hp=0b976f70c85f763abb238fe876083ea702132e86;hpb=6f767cec491d354150a11491905ba59cc77a2659;p=fontconfig.git diff --git a/src/fcfreetype.c b/src/fcfreetype.c index 0b976f7..f85e2f8 100644 --- a/src/fcfreetype.c +++ b/src/fcfreetype.c @@ -44,11 +44,10 @@ THE SOFTWARE. */ +#include "fcint.h" #include #include #include -#include -#include "fcint.h" #include #include FT_FREETYPE_H #include FT_TRUETYPE_TABLES_H @@ -65,6 +64,7 @@ #include "ftglue.h" +#if HAVE_WARNING_CPP_DIRECTIVE #if !HAVE_FT_GET_BDF_PROPERTY #warning "No FT_Get_BDF_Property: Please install freetype 2.1.4 or later" #endif @@ -72,6 +72,7 @@ #if !HAVE_FT_GET_PS_FONT_INFO #warning "No FT_Get_PS_Font_Info: Please install freetype 2.1.1 or later" #endif +#endif /* * Keep Han languages separated by eliminating languages @@ -97,7 +98,7 @@ FcFreeTypeIsExclusiveLang (const FcChar8 *lang) for (i = 0; i < NUM_CODE_PAGE_RANGE; i++) { - if (FcLangCompare (lang, FcCodePageRange[i].lang) != FcLangDifferentLang) + if (FcLangCompare (lang, FcCodePageRange[i].lang) == FcLangEqual) return FcTrue; } return FcFalse; @@ -555,8 +556,7 @@ FcFontCapabilities(FT_Face face); #define NUM_FC_MAC_ROMAN_FAKE (int) (sizeof (fcMacRomanFake) / sizeof (fcMacRomanFake[0])) -#if HAVE_ICONV && HAVE_ICONV_H -#define USE_ICONV 1 +#if USE_ICONV #include #endif @@ -976,7 +976,6 @@ FcStringInPatternElement (FcPattern *pat, const char *elt, FcChar8 *string) if (!FcStrCmpIgnoreBlanksAndCase (old, string)) { return FcTrue; - break; } return FcFalse; } @@ -1221,7 +1220,7 @@ FcFreeTypeQuery (const FcChar8 *file, * or which are simply a FC_FAMILY and FC_STYLE glued together */ { - int fn, fa, st; + int fn, fa; FcChar8 *full; FcChar8 *fam; FcChar8 *style; @@ -1280,11 +1279,9 @@ FcFreeTypeQuery (const FcChar8 *file, printf ("Saving unique fullname %s\n", full); } - if (!FcPatternAddString (pat, FC_FILE, (FcChar8 *)basename((char *)FcStrCopy(file)))) + if (!FcPatternAddString (pat, FC_FILE, file)) goto bail1; - FcPatternAddFullFname (pat, (const char *)FcStrCopy (file)); - if (!FcPatternAddInteger (pat, FC_INDEX, id)) goto bail1; @@ -1433,7 +1430,6 @@ FcFreeTypeQuery (const FcChar8 *file, if (!foundry) { int rc; - BDF_PropertyRec prop; rc = FT_Get_BDF_Property(face, "FOUNDRY", &prop); if(rc == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM) foundry = (FcChar8 *) prop.u.atom; @@ -1594,14 +1590,18 @@ FcFreeTypeQuery (const FcChar8 *file, for (i = 0; i < face->num_fixed_sizes; i++) if (!FcPatternAddDouble (pat, FC_PIXEL_SIZE, FcGetPixelSize (face, i))) - goto bail1; + goto bail2; if (!FcPatternAddBool (pat, FC_ANTIALIAS, FcFalse)) - goto bail1; + goto bail2; #if HAVE_FT_GET_BDF_PROPERTY if(face->num_fixed_sizes == 1) { int rc; int value; - BDF_PropertyRec prop; + + /* skip bitmap fonts which do not even have a family name */ + rc = FT_Get_BDF_Property(face, "FAMILY_NAME", &prop); + if (rc != 0 || prop.type != BDF_PROPERTY_TYPE_ATOM) + goto bail2; rc = FT_Get_BDF_Property(face, "POINT_SIZE", &prop); if(rc == 0 && prop.type == BDF_PROPERTY_TYPE_INTEGER) @@ -2302,6 +2302,10 @@ FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4) int p; initial = 0; + + if (!face) + return 0; + /* * Find the current encoding */ @@ -2422,7 +2426,7 @@ FcFreeTypeCheckGlyph (FT_Face face, FcChar32 ucs4, FcCharSet * FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing) { - FcChar32 page, off, max, ucs4; + FcChar32 page, off, ucs4; #ifdef CHECK FcChar32 font_max = 0; #endif @@ -2503,7 +2507,6 @@ FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing) { FT_UInt gindex; - max = fcFontDecoders[o].max; /* * Find the first encoded character in the font */ @@ -2734,11 +2737,13 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags, FT_UShort *scri FT_Stream stream = face->stream; FT_Error error; FT_UShort n, p; - FT_Memory memory = stream->memory; + FT_Memory memory; if ( !stream ) return TT_Err_Invalid_Face_Handle; + memory = stream->memory; + if (( error = ftglue_face_goto_table( face, tabletag, stream ) )) return error; @@ -2749,7 +2754,7 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags, FT_UShort *scri if ( ftglue_stream_seek ( stream, base_offset + 4L ) || ftglue_stream_frame_enter( stream, 2L ) ) return error; - new_offset = ((FT_UShort)ftglue_stream_get_short ( stream )) + base_offset; + new_offset = GET_UShort() + base_offset; ftglue_stream_frame_exit( stream ); @@ -2763,7 +2768,7 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags, FT_UShort *scri if ( ftglue_stream_frame_enter( stream, 2L ) ) return error; - *script_count = ((FT_UShort)ftglue_stream_get_short ( stream )); + *script_count = GET_UShort (); ftglue_stream_frame_exit( stream ); @@ -2778,20 +2783,17 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags, FT_UShort *scri if ( ftglue_stream_frame_enter( stream, 6L ) ) goto Fail; - (*stags)[p] = ((FT_ULong)ftglue_stream_get_long ( stream )); - new_offset = ((FT_UShort)ftglue_stream_get_short ( stream )) + base_offset; + (*stags)[p] = GET_ULong (); + new_offset = GET_UShort () + base_offset; ftglue_stream_frame_exit( stream ); cur_offset = ftglue_stream_pos( stream ); - if ( ftglue_stream_seek( stream, new_offset ) ) - goto Fail; + error = ftglue_stream_seek( stream, new_offset ); if ( error == TT_Err_Ok ) p++; - else if ( error != TTO_Err_Empty_Script ) - goto Fail; (void)ftglue_stream_seek( stream, cur_offset ); } @@ -2802,7 +2804,7 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags, FT_UShort *scri goto Fail; } - // sort the tag list before returning it + /* sort the tag list before returning it */ qsort(*stags, *script_count, sizeof(FT_ULong), compareulong); return TT_Err_Ok; @@ -2810,6 +2812,7 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags, FT_UShort *scri Fail: *script_count = 0; ftglue_free( memory, *stags ); + *stags = NULL; return error; }