Charset hashing depended on uniqueness of leaves.
authorKeith Packard <keithp@neko.keithp.com>
Thu, 7 Sep 2006 00:45:40 +0000 (17:45 -0700)
committerKeith Packard <keithp@neko.keithp.com>
Thu, 7 Sep 2006 00:45:40 +0000 (17:45 -0700)
Charset hashing actually use the value of the leaf pointers, which is
clearly wrong, especially now that charsets are not shared across multiple
font directories.

src/fccharset.c

index 1c2e2ea..5da1312 100644 (file)
@@ -1064,8 +1064,8 @@ FcCharSetHash (FcCharSet *fcs)
     int                i;
 
     /* hash in leaves */
-    for (i = 0; i < fcs->num * (int) (sizeof (FcCharLeaf *) / sizeof (FcChar32)); i++)
-       hash = ((hash << 1) | (hash >> 31)) ^ (FcChar32)(FcCharSetLeaf(fcs, i)->map);
+    for (i = 0; i < fcs->num; i++)
+       hash = ((hash << 1) | (hash >> 31)) ^ FcCharLeafHash (FcCharSetLeaf(fcs,i));
     /* hash in numbers */
     for (i = 0; i < fcs->num; i++)
        hash = ((hash << 1) | (hash >> 31)) ^ *FcCharSetNumbers(fcs);