* Improve resource fork handler for POSIX
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
diff --git a/ChangeLog b/ChangeLog
index 0cd1e63..aa4fe2d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-12-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * 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 <wl@gnu.org>
* builds/toplevel.mk (version): Protect against `distclean' target.
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 6a26140..e16a19f 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;