diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh index 8cbe6584b..8d59c6cf3 100644 --- a/src/hb-dsalgs.hh +++ b/src/hb-dsalgs.hh @@ -502,6 +502,9 @@ struct hb_bytes_t { inline hb_bytes_t (void) : bytes (nullptr), len (0) {} inline hb_bytes_t (const char *bytes_, unsigned int len_) : bytes (bytes_), len (len_) {} + inline hb_bytes_t (const void *bytes_, unsigned int len_) : bytes ((const char *) bytes_), len (len_) {} + + inline void free (void) { ::free ((void *) bytes); bytes = nullptr; len = 0; } inline int cmp (const hb_bytes_t &a) const { diff --git a/src/hb-machinery-private.hh b/src/hb-machinery-private.hh index 99ef485a3..05add1f4d 100644 --- a/src/hb-machinery-private.hh +++ b/src/hb-machinery-private.hh @@ -402,7 +402,7 @@ struct hb_serialize_context_t } template - inline Type *copy (void) + inline Type *copy (void) const { assert (!this->ran_out_of_room); unsigned int len = this->head - this->start; @@ -411,6 +411,25 @@ struct hb_serialize_context_t memcpy (p, this->start, len); return reinterpret_cast (p); } + inline hb_bytes_t copy_bytes (void) const + { + assert (!this->ran_out_of_room); + unsigned int len = this->head - this->start; + void *p = malloc (len); + if (p) + memcpy (p, this->start, len); + else + return hb_bytes_t (); + return hb_bytes_t (p, len); + } + inline hb_blob_t *copy_blob (void) const + { + assert (!this->ran_out_of_room); + return hb_blob_create (this->start, + this->head - this->start, + HB_MEMORY_MODE_DUPLICATE, + nullptr, nullptr); + } template inline Type *allocate_size (unsigned int size)