提交 99d9ef78 编写于 作者: B Behdad Esfahbod

Write hb_face_create_for_data() in terms of hb_face_create_for_tables()

Fixes lack of head_table initialization in create_for_tables() also.
上级 67744638
...@@ -257,6 +257,9 @@ hb_face_create_for_tables (hb_get_table_func_t get_table, ...@@ -257,6 +257,9 @@ hb_face_create_for_tables (hb_get_table_func_t get_table,
face->ot_layout = _hb_ot_layout_new (face); face->ot_layout = _hb_ot_layout_new (face);
face->head_blob = Sanitizer<head>::sanitize (hb_face_get_table (face, HB_OT_TAG_head));
face->head_table = Sanitizer<head>::lock_instance (face->head_blob);
return face; return face;
} }
...@@ -266,11 +269,6 @@ typedef struct _hb_face_for_data_closure_t { ...@@ -266,11 +269,6 @@ typedef struct _hb_face_for_data_closure_t {
unsigned int index; unsigned int index;
} hb_face_for_data_closure_t; } hb_face_for_data_closure_t;
static hb_face_for_data_closure_t _hb_face_for_data_closure_nil = {
&_hb_blob_nil,
0
};
static hb_face_for_data_closure_t * static hb_face_for_data_closure_t *
_hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index) _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
{ {
...@@ -278,7 +276,7 @@ _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index) ...@@ -278,7 +276,7 @@ _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
closure = (hb_face_for_data_closure_t *) malloc (sizeof (hb_face_for_data_closure_t)); closure = (hb_face_for_data_closure_t *) malloc (sizeof (hb_face_for_data_closure_t));
if (unlikely (!closure)) if (unlikely (!closure))
return &_hb_face_for_data_closure_nil; return NULL;
closure->blob = hb_blob_reference (blob); closure->blob = hb_blob_reference (blob);
closure->index = index; closure->index = index;
...@@ -289,10 +287,8 @@ _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index) ...@@ -289,10 +287,8 @@ _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
static void static void
_hb_face_for_data_closure_destroy (hb_face_for_data_closure_t *closure) _hb_face_for_data_closure_destroy (hb_face_for_data_closure_t *closure)
{ {
if (likely (closure != &_hb_face_for_data_closure_nil)) { hb_blob_destroy (closure->blob);
hb_blob_destroy (closure->blob); free (closure);
free (closure);
}
} }
static hb_blob_t * static hb_blob_t *
...@@ -316,23 +312,16 @@ hb_face_t * ...@@ -316,23 +312,16 @@ hb_face_t *
hb_face_create_for_data (hb_blob_t *blob, hb_face_create_for_data (hb_blob_t *blob,
unsigned int index) unsigned int index)
{ {
hb_face_t *face;
if (!HB_OBJECT_DO_CREATE (hb_face_t, face))
return &_hb_face_nil;
face->get_table = _hb_face_for_data_get_table;
face->destroy = (hb_destroy_func_t) _hb_face_for_data_closure_destroy;
hb_blob_reference (blob); hb_blob_reference (blob);
face->user_data = _hb_face_for_data_closure_create (Sanitizer<OpenTypeFontFile>::sanitize (blob), index); hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (Sanitizer<OpenTypeFontFile>::sanitize (blob), index);
hb_blob_destroy (blob); hb_blob_destroy (blob);
face->head_blob = Sanitizer<head>::sanitize (hb_face_get_table (face, HB_OT_TAG_head)); if (unlikely (!closure))
face->head_table = Sanitizer<head>::lock_instance (face->head_blob); return &_hb_face_nil;
face->ot_layout = _hb_ot_layout_new (face);
return face; return hb_face_create_for_tables (_hb_face_for_data_get_table,
(hb_destroy_func_t) _hb_face_for_data_closure_destroy,
closure);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册