summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Lam <plam@MIT.EDU>2005-11-17 15:43:39 +0000
committerPatrick Lam <plam@MIT.EDU>2005-11-17 15:43:39 +0000
commit1c5b6345b9023dee7962468fccb678b5f2e56ce3 (patch)
treeb72dbd8813455d211e7cc1a5fbfb91d0ed82c29b
parent8e351527bb87798e9b796e12a3b1ee6229536a28 (diff)
downloadfontconfig-1c5b6345b9023dee7962468fccb678b5f2e56ce3.tar.gz
Don't add current_arch_start more than once.
Fix ordering of ALIGN with respect to saving block_ptr; add another ALIGN to fcfs.c. reviewed by: plam
-rw-r--r--ChangeLog16
-rw-r--r--src/fccache.c2
-rw-r--r--src/fccharset.c12
-rw-r--r--src/fcfs.c10
-rw-r--r--src/fcname.c6
-rw-r--r--src/fcpat.c1
6 files changed, 39 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index f803d66..c02da82 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2005-11-17 Andreas Schwab <schwab@suse.de>
+ reviewed by: plam
+
+ * src/fccache.c (FcGlobalCacheSave):
+
+ Don't add current_arch_start more than once.
+
+2005-11-16 Patrick Lam <plam@mit.edu>
+ * src/fccharset.c (FcCharSetDistributeBytes, FcCharSetUnserialize):
+ * src/fcfs.c (FcFontSetUnserialize):
+ * src/fcname.c (FcObjectDistributeBytes, FcObjectUnserialize):
+ * src/fcpat.c (FcStrUnserialize):
+
+ Fix ordering of ALIGN with respect to saving block_ptr; add
+ another ALIGN to fcfs.c.
+
2005-11-16 Patrick Lam <plam@mit.edu>
* src/fccache.c (FcDirCacheProduce)
diff --git a/src/fccache.c b/src/fccache.c
index 84a366e..fb3f0bb 100644
--- a/src/fccache.c
+++ b/src/fccache.c
@@ -367,7 +367,7 @@ FcGlobalCacheSave (FcGlobalCache *cache,
{
truncate_to += strlen(dir->name) + 1;
truncate_to += sizeof (FcCache);
- truncate_to = FcCacheNextOffset (current_arch_start + truncate_to);
+ truncate_to = FcCacheNextOffset (truncate_to);
truncate_to += dir->metadata.count;
}
truncate_to -= current_arch_start;
diff --git a/src/fccharset.c b/src/fccharset.c
index 790d78f..e152a5a 100644
--- a/src/fccharset.c
+++ b/src/fccharset.c
@@ -1379,20 +1379,20 @@ FcCharSetDistributeBytes (FcCache * metadata, void * block_ptr)
if (!FcCharSetEnsureBank(bi))
return 0;
- charsets[bi] = (FcCharSet *)block_ptr;
block_ptr = ALIGN (block_ptr, FcCharSet);
+ charsets[bi] = (FcCharSet *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
(sizeof (FcCharSet) * charset_count));
- numbers[bi] = (FcChar16 *)block_ptr;
block_ptr = ALIGN (block_ptr, FcChar16);
+ numbers[bi] = (FcChar16 *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
(sizeof(FcChar16) * charset_numbers_count));
- leaves[bi] = (FcCharLeaf *)block_ptr;
block_ptr = ALIGN (block_ptr, FcCharLeaf);
+ leaves[bi] = (FcCharLeaf *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
(sizeof(FcCharLeaf) * charset_leaf_count));
- leaf_idx[bi] = (int *)block_ptr;
block_ptr = ALIGN (block_ptr, int);
+ leaf_idx[bi] = (int *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
(sizeof(int) * charset_leaf_idx_count));
@@ -1438,15 +1438,19 @@ FcCharSetUnserialize (FcCache metadata, void *block_ptr)
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));
+ block_ptr = ALIGN (block_ptr, FcChar16);
numbers[bi] = (FcChar16 *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
(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));
+ 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));
diff --git a/src/fcfs.c b/src/fcfs.c
index 0788a6f..83b3e96 100644
--- a/src/fcfs.c
+++ b/src/fcfs.c
@@ -155,6 +155,7 @@ FcFontSetUnserialize(FcCache metadata, FcFontSet * s, void * block_ptr)
int nfont;
int i, n;
+ block_ptr = ALIGN (block_ptr, int);
nfont = *(int *)block_ptr;
block_ptr = (int *)block_ptr + 1;
@@ -174,10 +175,17 @@ FcFontSetUnserialize(FcCache metadata, FcFontSet * s, void * block_ptr)
if (nfont > 0)
{
FcPattern * p = (FcPattern *)block_ptr;
- block_ptr = FcPatternUnserialize (metadata, block_ptr);
+
+ /* The following line is a bit counterintuitive. The usual
+ * convention is that FcPatternUnserialize is responsible for
+ * aligning the FcPattern. However, the FontSet also stores
+ * the FcPatterns in its own array, so we need to align here
+ * too. */
+ p = ALIGN(p, FcPattern);
for (i = 0; i < nfont; i++)
s->fonts[n + i] = p+i;
+ block_ptr = FcPatternUnserialize (metadata, block_ptr);
block_ptr = FcObjectUnserialize (metadata, block_ptr);
}
diff --git a/src/fcname.c b/src/fcname.c
index 6ca4f1a..bf265bd 100644
--- a/src/fcname.c
+++ b/src/fcname.c
@@ -341,11 +341,11 @@ FcObjectNeededBytesAlign (void)
void *
FcObjectDistributeBytes (FcCache * metadata, void * block_ptr)
{
- *(int *)block_ptr = biggest_known_ntypes;
block_ptr = ALIGN (block_ptr, int);
+ *(int *)block_ptr = biggest_known_ntypes;
block_ptr = (int *) block_ptr + 1;
- biggest_ptr = block_ptr;
block_ptr = ALIGN (block_ptr, char);
+ biggest_ptr = block_ptr;
block_ptr = (char *) block_ptr + biggest_known_count;
return block_ptr;
}
@@ -367,6 +367,7 @@ FcObjectUnserialize (FcCache metadata, void *block_ptr)
{
int new_biggest;
new_biggest = *(int *)block_ptr;
+ block_ptr = ALIGN (block_ptr, int);
block_ptr = (int *) block_ptr + 1;
if (biggest_known_ntypes < new_biggest)
{
@@ -409,6 +410,7 @@ FcObjectUnserialize (FcCache metadata, void *block_ptr)
biggest_known_ntypes = new_biggest;
biggest_known_types = (const FcObjectType *)bn;
}
+ block_ptr = ALIGN (block_ptr, char);
block_ptr = (char *) block_ptr + biggest_known_count;
return block_ptr;
}
diff --git a/src/fcpat.c b/src/fcpat.c
index bb922fe..a82fb6f 100644
--- a/src/fcpat.c
+++ b/src/fcpat.c
@@ -1963,6 +1963,7 @@ FcStrUnserialize (FcCache metadata, void *block_ptr)
return 0;
FcMemAlloc (FC_MEM_STRING, sizeof (char) * metadata.str_count);
+ block_ptr = ALIGN (block_ptr, FcChar8);
static_strs[bi] = (FcChar8 *)block_ptr;
block_ptr = (void *)((char *)block_ptr +
(sizeof (char) * metadata.str_count));