diff --git a/ChangeLog b/ChangeLog index 0cd1e6327..aa4fe2dad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-12-15 suzuki toshiya + + * src/base/ftobjs.c: Improvement of resource fork handler for POSIX, + http://lists.gnu.org/archive/html/freetype-devel/2006-10/msg00025.html + (Mac_Read_sfnt_Resource): Count only `sfnt' resource of suitcase font + format or .dfont, to simulate the face index number counted by ftmac.c. + (IsMacResource): Return the number of scalable faces correctly. + 2006-12-10 Werner Lemberg * builds/toplevel.mk (version): Protect against `distclean' target. diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 6a26140f7..e16a19f0f 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -1371,6 +1371,7 @@ FT_Long flag_offset; FT_Long rlen; int is_cff; + FT_Long face_index_in_resource = 0; if ( face_index == -1 ) @@ -1402,7 +1403,7 @@ error = open_face_from_buffer( library, sfnt_data, rlen, - face_index, + face_index_in_resource, is_cff ? "cff" : "truetype", aface ); @@ -1444,6 +1445,8 @@ error = Mac_Read_POST_Resource( library, stream, data_offsets, count, face_index, aface ); FT_FREE( data_offsets ); + /* POST exists in a LWFN providing single face */ + (*aface)->num_faces = 1; return error; } @@ -1453,9 +1456,13 @@ &data_offsets, &count ); if ( !error ) { + FT_Long face_index_internal = face_index % count; + + error = Mac_Read_sfnt_Resource( library, stream, data_offsets, count, - face_index, aface ); + face_index_internal, aface ); FT_FREE( data_offsets ); + (*aface)->num_faces = count; } return error;