diff options
Diffstat (limited to 'src/sfntfont.c')
| -rw-r--r-- | src/sfntfont.c | 41 |
1 files changed, 9 insertions, 32 deletions
diff --git a/src/sfntfont.c b/src/sfntfont.c index 4f49f03d744..858c5449ac7 100644 --- a/src/sfntfont.c +++ b/src/sfntfont.c @@ -581,20 +581,18 @@ static void sfnt_parse_languages (struct sfnt_meta_table *meta, struct sfnt_font_desc *desc) { - char *data, *metadata, *tag; + char *data; struct sfnt_meta_data_map map; - char *saveptr; /* Look up the ``design languages'' metadata. This is a comma (and possibly space) separated list of scripts that the font was designed for. Here is an example of one such tag: - zh-Hans,Jpan,Kore + zh-Hans,Japn,Kore for a font that covers Simplified Chinese, along with Japanese and Korean text. */ - saveptr = NULL; data = sfnt_find_metadata (meta, SFNT_META_DATA_TAG_DLNG, &map); @@ -608,34 +606,13 @@ sfnt_parse_languages (struct sfnt_meta_table *meta, return; } - USE_SAFE_ALLOCA; - - /* Now copy metadata and add a trailing NULL byte. */ - - if (map.data_length >= SIZE_MAX) - memory_full_up (); - - metadata = SAFE_ALLOCA ((size_t) map.data_length + 1); - memcpy (metadata, data, map.data_length); - metadata[map.data_length] = '\0'; - - /* Loop through each script-language tag. Note that there may be - extra leading spaces. */ - while ((tag = strtok_r (metadata, ",", &saveptr))) - { - metadata = NULL; - - if (strstr (tag, "Hans") || strstr (tag, "Hant")) - desc->languages = Fcons (Qzh, desc->languages); - - if (strstr (tag, "Japn")) - desc->languages = Fcons (Qja, desc->languages); - - if (strstr (tag, "Kore")) - desc->languages = Fcons (Qko, desc->languages); - } - - SAFE_FREE (); + if (memmem (data, map.data_length, "Hans", 4) + || memmem (data, map.data_length, "Hant", 4)) + desc->languages = Fcons (Qzh, desc->languages); + if (memmem (data, map.data_length, "Japn", 4)) + desc->languages = Fcons (Qja, desc->languages); + if (memmem (data, map.data_length, "Kore", 4)) + desc->languages = Fcons (Qko, desc->languages); } /* Return the font registry corresponding to the encoding subtable |
