static int ** leaf_idx = 0;
static int charset_leaf_idx_ptr, charset_leaf_idx_count;
-extern const FcChar16 *langBankNumbers;
-extern const FcCharLeaf *langBankLeaves;
-extern const int *langBankLeafIdx;
+extern const FcChar16 langBankNumbers[];
+extern const FcCharLeaf langBankLeaves[];
+extern const int langBankLeafIdx[];
static FcBool
FcCharSetEnsureBank (int bi);
void
FcLangCharSetPopulate (void)
{
- int bi = FcCacheBankToIndex (FC_BANK_LANGS);
+ int bi = FcCacheBankToIndexMTF (FC_BANK_LANGS);
FcCharSetEnsureBank (bi);
charsets[bi] = 0;
- numbers[bi] = (FcChar16 *)&langBankNumbers;
- leaves[bi] = (FcCharLeaf *)&langBankLeaves;
- leaf_idx[bi] = (int *)&langBankLeafIdx;
+ numbers[bi] = (FcChar16 *)langBankNumbers;
+ leaves[bi] = (FcCharLeaf *)langBankLeaves;
+ leaf_idx[bi] = (int *)langBankLeafIdx;
}
FcCharSet *
}
else
{
- leaves[fcs->bank][leaf_idx[fcs->bank][fcs->u.stat.leafidx_offset]+pos] = *leaf;
+ int bi = FcCacheBankToIndex(fcs->bank);
+ leaves[bi][leaf_idx[fcs->bank][fcs->u.stat.leafidx_offset]+pos] = *leaf;
}
return FcTrue;
}
sizeof (FcChar16) * c->num; /* number */
}
+int
+FcCharSetNeededBytesAlign (void)
+{
+ return __alignof__ (FcCharSet) + __alignof__ (int) +
+ __alignof__ (FcCharLeaf) + __alignof__ (FcChar16);
+}
+
static FcBool
FcCharSetEnsureBank (int bi)
{
if (!FcCharSetEnsureBank(bi))
return 0;
+ block_ptr = ALIGN (block_ptr, FcCharSet);
charsets[bi] = (FcCharSet *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
(sizeof (FcCharSet) * charset_count));
+ block_ptr = ALIGN (block_ptr, FcChar16);
numbers[bi] = (FcChar16 *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
(sizeof(FcChar16) * charset_numbers_count));
+ block_ptr = ALIGN (block_ptr, FcCharLeaf);
leaves[bi] = (FcCharLeaf *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
(sizeof(FcCharLeaf) * charset_leaf_count));
+ block_ptr = ALIGN (block_ptr, int);
leaf_idx[bi] = (int *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
(sizeof(int) * charset_leaf_idx_count));
}
void *
-FcCharSetUnserialize (FcCache metadata, void *block_ptr)
+FcCharSetUnserialize (FcCache *metadata, void *block_ptr)
{
- int bi = FcCacheBankToIndex(metadata.bank);
+ int bi = FcCacheBankToIndex(metadata->bank);
if (!FcCharSetEnsureBank(bi))
return 0;
+ block_ptr = ALIGN (block_ptr, FcCharSet);
charsets[bi] = (FcCharSet *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
- (sizeof (FcCharSet) * metadata.charset_count));
+ (sizeof (FcCharSet) * metadata->charset_count));
+ block_ptr = ALIGN (block_ptr, FcChar16);
numbers[bi] = (FcChar16 *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
- (sizeof(FcChar16) * metadata.charset_numbers_count));
+ (sizeof(FcChar16) * metadata->charset_numbers_count));
+ block_ptr = ALIGN (block_ptr, FcCharLeaf);
leaves[bi] = (FcCharLeaf *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
- (sizeof(FcCharLeaf) * metadata.charset_leaf_count));
+ (sizeof(FcCharLeaf) * metadata->charset_leaf_count));
+ block_ptr = ALIGN (block_ptr, int);
leaf_idx[bi] = (int *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
- (sizeof(int) * metadata.charset_leaf_idx_count));
+ (sizeof(int) * metadata->charset_leaf_idx_count));
return block_ptr;
}