diff --git a/src/cache/ftcmanag.c b/src/cache/ftcmanag.c index dd9bb6190..6b8b80e33 100644 --- a/src/cache/ftcmanag.c +++ b/src/cache/ftcmanag.c @@ -118,14 +118,21 @@ FT_Pointer ftcscaler, FT_Pointer ftcmanager ) { + FT_Error error; + FT_Size size; FTC_SizeNode node = (FTC_SizeNode)ftcnode; FTC_Scaler scaler = (FTC_Scaler)ftcscaler; FTC_Manager manager = (FTC_Manager)ftcmanager; - node->scaler = scaler[0]; + error = ftc_scaler_lookup_size( manager, scaler, &size ); + if ( !error ) + { + node->size = size; + node->scaler = scaler[0]; + } - return ftc_scaler_lookup_size( manager, scaler, &node->size ); + return error; } @@ -134,16 +141,23 @@ FT_Pointer ftcscaler, FT_Pointer ftcmanager ) { + FT_Error error; + FT_Size size; FTC_SizeNode node = (FTC_SizeNode)ftcnode; FTC_Scaler scaler = (FTC_Scaler)ftcscaler; FTC_Manager manager = (FTC_Manager)ftcmanager; - FT_Done_Size( node->size ); + error = ftc_scaler_lookup_size( manager, scaler, &size ); + if ( !error ) + { + FT_Done_Size( node->size ); - node->scaler = scaler[0]; + node->size = size; + node->scaler = scaler[0]; + } - return ftc_scaler_lookup_size( manager, scaler, &node->size ); + return error; } @@ -231,23 +245,25 @@ FT_Pointer ftcface_id, FT_Pointer ftcmanager ) { + FT_Error error; + FT_Face face; FTC_FaceNode node = (FTC_FaceNode)ftcnode; FTC_FaceID face_id = (FTC_FaceID)ftcface_id; FTC_Manager manager = (FTC_Manager)ftcmanager; - FT_Error error; - node->face_id = face_id; - error = manager->request_face( face_id, manager->library, manager->request_data, - &node->face ); + &face ); if ( !error ) { /* destroy initial size object; it will be re-created later */ - if ( node->face->size ) - FT_Done_Size( node->face->size ); + if ( face->size ) + FT_Done_Size( face->size ); + + node->face = face; + node->face_id = face_id; } return error; diff --git a/src/cache/ftcmru.c b/src/cache/ftcmru.c index 7171d4d20..dd23d31a3 100644 --- a/src/cache/ftcmru.c +++ b/src/cache/ftcmru.c @@ -249,11 +249,13 @@ if ( list->clazz.node_reset ) { - FTC_MruNode_Up( &list->nodes, node ); - error = list->clazz.node_reset( node, key, list->data ); if ( !error ) - goto Exit; + FTC_MruNode_Up( &list->nodes, node ); + else + node = NULL; + + goto Exit; } FTC_MruNode_Remove( &list->nodes, node );