On 28.10.2009 20:30, Vincent Povirk wrote:
If I've not mistaken, that uses lstricmp internally for comparing keys.
It uses lstrcmpiW, which according to MSDN can behave differently based on locale, but I don't think the Wine version does.
Note, that, it is not only difference in >0x7f "nls" chars (somewhat "expected"), there are difference in ascii range too (see that test from test/locale.c). [I'm saying about difference between wine vs. windows; I'm not sure if windows lstricmpW /really/ work differently in different locales]
[...]
I think what saves us is that programs rarely expose storage and stream names directly to users, so the set of characters we have to deal with in practice is limited.
I've looked at some .msi files - stream names contain problematic characters: '.' vs. '_' (mismatches between wine and windows; there are more such chars), '_' vs. '0' (mismatches between strcasecmp and strcoll|lstricmp).
So, while "problematic" files maybe very rare, but not impossible.
Still, we really should use a comparison function that's at least guaranteed to be consistent.