Micro-optimize hb_language_from_string()
As measured / improved by Benson Limketkai.
diff --git a/src/hb-common.cc b/src/hb-common.cc
index 291095f..e67059d 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -293,21 +293,21 @@
hb_language_t
hb_language_from_string (const char *str, int len)
{
- char strbuf[64];
-
if (!str || !len || !*str)
return HB_LANGUAGE_INVALID;
+ hb_language_item_t *item = NULL;
if (len >= 0)
{
/* NUL-terminate it. */
+ char strbuf[64];
len = MIN (len, (int) sizeof (strbuf) - 1);
memcpy (strbuf, str, len);
strbuf[len] = '\0';
- str = strbuf;
+ item = lang_find_or_insert (strbuf);
}
-
- hb_language_item_t *item = lang_find_or_insert (str);
+ else
+ item = lang_find_or_insert (str);
return likely (item) ? item->lang : HB_LANGUAGE_INVALID;
}