Lines 1104-1110
FcFreeTypeQueryFace (const FT_Face face,
Link Here
|
1104 |
char psname[256]; |
1104 |
char psname[256]; |
1105 |
const char *tmp; |
1105 |
const char *tmp; |
1106 |
|
1106 |
|
1107 |
FcChar8 *hashstr; |
1107 |
FcChar8 *hashstr = NULL; |
|
|
1108 |
char *fontdata = NULL; |
1109 |
FT_Error err; |
1110 |
FT_ULong len = 0, alen; |
1108 |
|
1111 |
|
1109 |
pat = FcPatternCreate (); |
1112 |
pat = FcPatternCreate (); |
1110 |
if (!pat) |
1113 |
if (!pat) |
Lines 1662-1673
FcFreeTypeQueryFace (const FT_Face face,
Link Here
|
1662 |
if (!FcPatternAddBool (pat, FC_DECORATIVE, decorative)) |
1665 |
if (!FcPatternAddBool (pat, FC_DECORATIVE, decorative)) |
1663 |
goto bail1; |
1666 |
goto bail1; |
1664 |
|
1667 |
|
1665 |
hashstr = FcHashGetSHA256DigestFromFile (file); |
1668 |
err = FT_Load_Sfnt_Table (face, 0, 0, NULL, &len); |
|
|
1669 |
if (err == FT_Err_Ok) |
1670 |
{ |
1671 |
alen = (len + 63) & ~63; |
1672 |
fontdata = malloc (alen); |
1673 |
if (!fontdata) |
1674 |
goto bail1; |
1675 |
err = FT_Load_Sfnt_Table (face, 0, 0, (FT_Byte *)fontdata, &len); |
1676 |
if (err != FT_Err_Ok) |
1677 |
goto bail1; |
1678 |
memset (&fontdata[len], 0, alen - len); |
1679 |
hashstr = FcHashGetSHA256DigestFromMemory (fontdata, len); |
1680 |
} |
1681 |
else if (err == FT_Err_Invalid_Face_Handle) |
1682 |
{ |
1683 |
/* font may not support SFNT. falling back to |
1684 |
* read the font data from file directly |
1685 |
*/ |
1686 |
hashstr = FcHashGetSHA256DigestFromFile (file); |
1687 |
} |
1688 |
else |
1689 |
{ |
1690 |
goto bail1; |
1691 |
} |
1666 |
if (!hashstr) |
1692 |
if (!hashstr) |
1667 |
goto bail1; |
1693 |
goto bail1; |
1668 |
if (!FcPatternAddString (pat, FC_HASH, hashstr)) |
1694 |
if (!FcPatternAddString (pat, FC_HASH, hashstr)) |
1669 |
goto bail1; |
1695 |
goto bail1; |
1670 |
free (hashstr); |
|
|
1671 |
|
1696 |
|
1672 |
/* |
1697 |
/* |
1673 |
* Compute the unicode coverage for the font |
1698 |
* Compute the unicode coverage for the font |
Lines 1756-1761
FcFreeTypeQueryFace (const FT_Face face,
Link Here
|
1756 |
bail2: |
1781 |
bail2: |
1757 |
FcCharSetDestroy (cs); |
1782 |
FcCharSetDestroy (cs); |
1758 |
bail1: |
1783 |
bail1: |
|
|
1784 |
if (hashstr) |
1785 |
free (hashstr); |
1786 |
if (fontdata) |
1787 |
free (fontdata); |
1759 |
FcPatternDestroy (pat); |
1788 |
FcPatternDestroy (pat); |
1760 |
bail0: |
1789 |
bail0: |
1761 |
return NULL; |
1790 |
return NULL; |