summaryrefslogtreecommitdiff
path: root/src/fclang.c
diff options
context:
space:
mode:
authorPatrick Lam <plam@MIT.EDU>2005-11-16 15:55:17 +0000
committerPatrick Lam <plam@MIT.EDU>2005-11-16 15:55:17 +0000
commit7fd7221e683d6c65b9199fd06d34d5215582748e (patch)
treec072468c4001de4ee182dbfcf2a8f98eef05834b /src/fclang.c
parent82f35f8bb4fe58ebc839531f4a63544dc07f0f5d (diff)
downloadfontconfig-7fd7221e683d6c65b9199fd06d34d5215582748e.tar.gz
Add *NeededBytesAlign(), which overestimates the padding which is later
added by the new ALIGN macro. Fix alignment problems on ia64 and s390 by bumping up block_ptr appropriately. (Earlier version by Andreas Schwab). Use sysconf to determine proper PAGESIZE value; this appears to be POSIX-compliant. (reported by Andreas Schwab) reviewed by: plam
Diffstat (limited to 'src/fclang.c')
-rw-r--r--src/fclang.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/fclang.c b/src/fclang.c
index b1c7c3f..5518821 100644
--- a/src/fclang.c
+++ b/src/fclang.c
@@ -721,6 +721,12 @@ FcLangSetNeededBytes (const FcLangSet *l)
return sizeof (FcLangSet);
}
+int
+FcLangSetNeededBytesAlign (void)
+{
+ return __alignof__ (FcLangSet);
+}
+
static FcBool
FcLangSetEnsureBank (int bi)
{
@@ -749,6 +755,7 @@ FcLangSetDistributeBytes (FcCache * metadata, void * block_ptr)
if (!FcLangSetEnsureBank(bi))
return 0;
+ block_ptr = ALIGN(block_ptr, FcLangSet);
langsets[bi] = block_ptr;
block_ptr = (void *)((char *)block_ptr +
langset_count * sizeof(FcLangSet));
@@ -778,6 +785,7 @@ FcLangSetUnserialize (FcCache metadata, void *block_ptr)
return 0;
FcMemAlloc (FC_MEM_LANGSET, metadata.langset_count * sizeof(FcLangSet));
+ block_ptr = ALIGN(block_ptr, FcLangSet);
langsets[bi] = (FcLangSet *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
metadata.langset_count * sizeof(FcLangSet));