diff --git a/src/hb-ot-post-table.hh b/src/hb-ot-post-table.hh index 090d3ccbe..7e164cba3 100644 --- a/src/hb-ot-post-table.hh +++ b/src/hb-ot-post-table.hh @@ -117,7 +117,7 @@ struct post if (glyph >= NUM_FORMAT1_NAMES) return hb_string_t (); - return hb_string_t (format1_names (glyph), strlen (format1_names (glyph))); + return format1_names (glyph); } if (version != 0x00020000 || glyph >= glyphNameIndex->len) @@ -125,7 +125,7 @@ struct post unsigned int index = glyphNameIndex->array[glyph]; if (index < NUM_FORMAT1_NAMES) - return hb_string_t (format1_names (index), strlen (format1_names (index))); + return format1_names (index); index -= NUM_FORMAT1_NAMES; if (index >= index_to_offset.len) @@ -163,19 +163,6 @@ struct post if (unlikely (!len)) return false; - if (version == 0x00010000) - { - for (int i = 0; i < NUM_FORMAT1_NAMES; i++) - { - if (strncmp (name, format1_names (i), len) == 0 && format1_names (i)[len] == '\0') - { - *glyph = i; - return true; - } - } - return false; - } - /* TODO format2 */ return false; } diff --git a/src/hb-string-array.hh b/src/hb-string-array.hh index afad5d75d..285b4b535 100644 --- a/src/hb-string-array.hh +++ b/src/hb-string-array.hh @@ -40,6 +40,10 @@ static const union HB_STRING_ARRAY_TYPE_NAME { struct { +/* I like to avoid storing the nul-termination byte since we don't need it, + * but C++ does not allow that. + * https://stackoverflow.com/questions/28433862/why-initializer-string-for-array-of-chars-is-too-long-compiles-fine-in-c-not + */ #define _S(s) char HB_PASTE (str, __LINE__)[sizeof (s)]; #include HB_STRING_ARRAY_LIST #undef _S @@ -59,12 +63,15 @@ static const unsigned int HB_STRING_ARRAY_OFFS_NAME[] = #define _S(s) offsetof (union HB_STRING_ARRAY_TYPE_NAME, st.HB_PASTE(str, __LINE__)), #include HB_STRING_ARRAY_LIST #undef _S + sizeof (HB_STRING_ARRAY_TYPE_NAME) }; -static inline const char * +static inline hb_string_t HB_STRING_ARRAY_NAME (unsigned int i) { - return HB_STRING_ARRAY_POOL_NAME.str + HB_STRING_ARRAY_OFFS_NAME[i]; + assert (i < ARRAY_LENGTH (HB_STRING_ARRAY_OFFS_NAME) - 1); + return hb_string_t (HB_STRING_ARRAY_POOL_NAME.str + HB_STRING_ARRAY_OFFS_NAME[i], + HB_STRING_ARRAY_OFFS_NAME[i + 1] - HB_STRING_ARRAY_OFFS_NAME[i] - 1); } #undef HB_STRING_ARRAY_TYPE_NAME