summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Kew <jfkthame@googlemail.com>2006-09-07 09:33:10 +0000
committerJonathan Kew <jfkthame@googlemail.com>2006-09-07 09:33:10 +0000
commit266d6522d7a65d5ae045b9b1bdc126fc58a2ecfd (patch)
tree425328d951287bce6a09703c1def6b03e36d26ff
parent7fae38157eef6b124df3c882aa6ac8341006b3c4 (diff)
ftmac.c fix for Intel Mac (endian issues), using patch from ft-devel list
git-svn-id: svn://tug.org/texlive/trunk@2091 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Build/source/libs/freetype2/src/base/ftmac.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/Build/source/libs/freetype2/src/base/ftmac.c b/Build/source/libs/freetype2/src/base/ftmac.c
index 6e4cbe577bc..ee5c65320a2 100644
--- a/Build/source/libs/freetype2/src/base/ftmac.c
+++ b/Build/source/libs/freetype2/src/base/ftmac.c
@@ -64,11 +64,13 @@
/* This is for Mac OS X. Without redefinition, OS_INLINE */
/* expands to `static inline' which doesn't survive the */
/* -ansi compilation flag of GCC. */
+#undef OS_INLINE
#define OS_INLINE static __inline__
#include <Carbon/Carbon.h>
#else
#include <Resources.h>
#include <Fonts.h>
+#include <Endian.h>
#include <Errors.h>
#include <Files.h>
#include <TextUtils.h>
@@ -536,7 +538,7 @@
/* The count is 1 greater than the value in the FOND. */
/* Isn't that cute? :-) */
- return 1 + *( (short*)( fond_data + sizeof ( FamRec ) ) );
+ return EndianS16_BtoN( *( (short*)( fond_data + sizeof ( FamRec ) ) ) ) + 1;
}
@@ -549,13 +551,13 @@
fond = (FamRec*)fond_data;
- face_all = *( (short *)( fond_data + sizeof ( FamRec ) ) ) + 1;
+ face_all = EndianS16_BtoN( *( (short *)( fond_data + sizeof ( FamRec ) ) ) ) + 1;
assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
face = 0;
for ( i = 0; i < face_all; i++ )
{
- if ( 0 == assoc[i].fontSize )
+ if ( 0 == EndianS16_BtoN( assoc[i].fontSize ) )
face++;
}
return face;
@@ -597,19 +599,19 @@
/* if the face at this index is not scalable,
fall back to the first one (old behavior) */
- if ( assoc->fontSize == 0 )
+ if ( EndianS16_BtoN( assoc->fontSize ) == 0 )
{
*have_sfnt = 1;
- *sfnt_id = assoc->fontID;
+ *sfnt_id = EndianS16_BtoN( assoc->fontID );
}
else if ( base_assoc->fontSize == 0 )
{
*have_sfnt = 1;
- *sfnt_id = base_assoc->fontID;
+ *sfnt_id = EndianS16_BtoN( base_assoc->fontID );
}
}
- if ( fond->ffStylOff )
+ if ( EndianS32_BtoN( fond->ffStylOff ) )
{
unsigned char* p = (unsigned char*)fond_data;
StyleTable* style;
@@ -619,10 +621,10 @@
int i;
- p += fond->ffStylOff;
+ p += EndianS32_BtoN( fond->ffStylOff );
style = (StyleTable*)p;
p += sizeof ( StyleTable );
- string_count = *(unsigned short*)(p);
+ string_count = EndianS16_BtoN( *(short*)(p) );
p += sizeof ( short );
for ( i = 0; i < string_count && i < 64; i++ )
@@ -770,13 +772,13 @@
Str255 lwfn_file_name;
UInt8 buff[HFS_MAXPATHLEN];
FT_Error err;
+ short num_faces;
have_sfnt = have_lwfn = 0;
HLock( fond );
parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, 0 );
- HUnlock( fond );
if ( lwfn_file_name[0] )
{
@@ -787,9 +789,12 @@
}
if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
- return 1;
+ num_faces = 1;
else
- return count_faces_scalable( *fond );
+ num_faces = count_faces_scalable( *fond );
+
+ HUnlock( fond );
+ return num_faces;
}