static hb_blob_t * _get_table (hb_tag_t tag, void *user_data) { PangoOTInfo *info = (PangoOTInfo *) user_data; FT_Byte *buffer; FT_ULong length = 0; FT_Error error; error = FT_Load_Sfnt_Table (info->face, tag, 0, NULL, &length); if (error) return hb_blob_create_empty (); buffer = g_malloc (length); if (buffer == NULL) return hb_blob_create_empty (); error = FT_Load_Sfnt_Table (info->face, tag, 0, buffer, &length); if (error) return hb_blob_create_empty (); return hb_blob_create ((const char *) buffer, length, HB_MEMORY_MODE_WRITABLE, g_free, buffer); }
hb_blob_t * gfxDWriteFont::GetFontTable(PRUint32 aTag) { const void *data; UINT32 size; void *context; BOOL exists; HRESULT hr = mFontFace->TryGetFontTable(NS_SWAP32(aTag), &data, &size, &context, &exists); if (SUCCEEDED(hr) && exists) { FontTableRec *ftr = new FontTableRec(mFontFace, context); return hb_blob_create(static_cast<const char*>(data), size, HB_MEMORY_MODE_READONLY, DestroyBlobFunc, ftr); } return hb_blob_create_empty(); }