Use auxbuffer for serialize_unicode_text
diff --git a/src/hb-buffer-serialize.cc b/src/hb-buffer-serialize.cc
index 10710b1..51e5043 100644
--- a/src/hb-buffer-serialize.cc
+++ b/src/hb-buffer-serialize.cc
@@ -332,24 +332,29 @@
unsigned int buf_size,
unsigned int *buf_consumed)
{
- hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, nullptr);
- *buf_consumed = 0;
- char *p = buf;
- /* We can use a much simpler implementation for this and copy text
- * directly into the output buffer. */
- for (unsigned int i = start; i < end; i++)
- {
- if (i) {
- *p++ = '|';
- }
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, nullptr);
+ *buf_consumed = 0;
+ for (unsigned int i = start; i < end; i++)
+ {
+ char b[1024];
+ char *p = b;
- p += hb_max (0, snprintf (p, buf_size - *buf_consumed, "U+%X", info[i].codepoint));
- *buf_consumed = p - buf;
- if (*buf_consumed > buf_size)
- return i - start;
- }
- *p = '\0';
- return end - start;
+ if (i)
+ *p++ = '|';
+
+ p += hb_max (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "U+%04X", info[i].codepoint));
+ unsigned int l = p - b;
+ if (buf_size > l)
+ {
+ memcpy (buf, b, l);
+ buf += l;
+ buf_size -= l;
+ *buf_consumed += l;
+ *buf = '\0';
+ } else
+ return i - start;
+ }
+ return end - start;
}
/**