Piotr Caban piotr@codeweavers.com writes:
@@ -206,30 +209,107 @@ static inline int compare_unicode_weights(int flags, const WCHAR *str1, int len1 } }
ce1 = collation_table[collation_table[*str1 >> 8] + (*str1 & 0xff)];
ce2 = collation_table[collation_table[*str2 >> 8] + (*str2 & 0xff)];
if (!dlen1)
{
dlen1 = wine_decompose(0, *str1, dstr1, 4);
dpos1 = 0;
}
ce1 = collation_table[collation_table[dstr1[dpos1] >> 8] + (dstr1[dpos1] & 0xff)];
if (!(ce1 >> 16))
{
dpos1++;
if (dpos1 == dlen1)
{
str1++;
len1--;
dlen1 = 0;
}
continue;
}
if (!dlen2)
{
dlen2 = wine_decompose(0, *str2, dstr2, 4);
dpos2 = 0;
}
ce2 = collation_table[collation_table[dstr2[dpos2] >> 8] + (dstr2[dpos2] & 0xff)];
if (!(ce2 >> 16))
{
dpos2++;
if (dpos2 == dlen2)
{
str2++;
len2--;
dlen2 = 0;
}
continue;
}
It looks like this could benefit from using some kind of helper function.