* src/base/ftmac.c (FT_New_Face_From_FOND): Fall back to SFNT if LWFN fails and both are available.
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 62
diff --git a/ChangeLog b/ChangeLog
index 0a70b69..0651c50 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-18 Garrick Meeker <garrick@digitalanarchy.com>
+
+ * src/base/ftmac.c (FT_New_Face_From_FOND): Fall back to SFNT if
+ LWFN fails and both are available.
+
2006-09-11 David Turner <david@freetype.org>
* src/sfnt/sfobjs.c (tt_face_get_name): Support some fonts which
diff --git a/src/base/ftmac.c b/src/base/ftmac.c
index 3e23376..0d613f5 100644
--- a/src/base/ftmac.c
+++ b/src/base/ftmac.c
@@ -53,6 +53,12 @@
- If there is a TrueType font (an `sfnt' resource), read it into memory,
wrap it into a memory stream, load the TrueType driver and delegate
the rest of the work to it, by calling FT_Open_Face().
+
+ - Some suitcase fonts (notably Onyx) might point the `LWFN' file to
+ itself, even though it doesn't contains `POST' resources. To handle
+ this special case without opening the file an extra time, we just
+ ignore errors from the `LWFN' and fallback to the `sfnt' if both are
+ available.
*/
@@ -1242,19 +1248,21 @@
}
if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
- return FT_New_Face_From_LWFN( library,
- path_lwfn,
- face_index,
- aface );
+ error = FT_New_Face_From_LWFN( library,
+ path_lwfn,
+ face_index,
+ aface );
+ else
+ error = FT_Err_Unknown_File_Format;
found_no_lwfn_file:
- if ( have_sfnt )
- return FT_New_Face_From_SFNT( library,
- sfnt_id,
- face_index,
- aface );
+ if ( have_sfnt && FT_Err_Ok != error )
+ error = FT_New_Face_From_SFNT( library,
+ sfnt_id,
+ face_index,
+ aface );
- return FT_Err_Unknown_File_Format;
+ return error;
}