Weird bucket choice or number in cCharSetFreezeOrig() and FcCharSetFindFrozen()

Florent Rougon <[email protected]>
Newsgroups gmane.comp.fonts.fontconfig
Message-ID <[email protected]>
Hi again,

There is another thing that looks odd to me in src/fccharset.c:

#define FC_CHAR_SET_HASH_SIZE    67

[...]

static FcBool
FcCharSetFreezeOrig (FcCharSetFreezer *freezer, const FcCharSet *orig, const FcCharSet *frozen)
{
    FcCharSetOrigEnt	**bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE];

[...]

static const FcCharSet *
FcCharSetFindFrozen (FcCharSetFreezer *freezer, const FcCharSet *orig)
{
    FcCharSetOrigEnt    **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE];

[...]

I seems to me that either FC_CHAR_SET_HASH_SIZE should be defined as a
power of two minus one (2**n - 1 for some n), or the two occurrences of
the & operator in the above lines should be replaced with a % operator.
Otherwise, at most 8 buckets among the 67 available in
freezer->orig_hash_table can effectively be used
(67 = 64 + 2 + 1 and 2**3 = 8).

What do you think?

(all this with current 'master', i.e.
fontconfig commit 28139816d62b8444ca61a000a87c71e59fef104d)

Regards

-- 
Florent
_______________________________________________
Fontconfig mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/fontconfig
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.