summaryrefslogtreecommitdiff
path: root/pango/pango-emoji.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-01-31 04:56:23 +0000
committerMatthias Clasen <mclasen@redhat.com>2023-01-31 04:56:23 +0000
commitfad3e7690845f128aa0beba9adaae7038c01269f (patch)
tree6dbf158ea77e0311be9022dcc5741e8af1a27bcb /pango/pango-emoji.c
parent7b4a7d6dc00365289bece029e6698d01441bfb1f (diff)
parentc895f9a8c4b7c4d5553d6fde1c95921117fffbc5 (diff)
downloadpango-fad3e7690845f128aa0beba9adaae7038c01269f.tar.gz
Merge branch 'misc-opt' into 'main'
shape: Avoid some overhead See merge request GNOME/pango!674
Diffstat (limited to 'pango/pango-emoji.c')
-rw-r--r--pango/pango-emoji.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/pango/pango-emoji.c b/pango/pango-emoji.c
index e1f16dba..83ebfe6e 100644
--- a/pango/pango-emoji.c
+++ b/pango/pango-emoji.c
@@ -213,14 +213,19 @@ typedef unsigned char *emoji_text_iter_t;
PangoEmojiIter *
_pango_emoji_iter_init (PangoEmojiIter *iter,
- const char *text,
- int length)
+ const char *text,
+ int length,
+ unsigned int n_chars)
{
- unsigned int n_chars = g_utf8_strlen (text, length);
- unsigned char *types = g_malloc (n_chars);
+ unsigned char *types;
unsigned int i;
const char *p;
+ if (n_chars < 64)
+ types = iter->types_;
+ else
+ types = g_malloc (n_chars);
+
p = text;
for (i = 0; i < n_chars; i++)
{
@@ -247,7 +252,8 @@ _pango_emoji_iter_init (PangoEmojiIter *iter,
void
_pango_emoji_iter_fini (PangoEmojiIter *iter)
{
- g_free (iter->types);
+ if (iter->types != iter->types_)
+ g_free (iter->types);
}
gboolean