When lstrcmpiA was moved from ole2nls.c to locale.c, (around 28th June) the 
results of comparisons in some cases became reversed. For example, the 
underscore now returns as greater than alphabetic characters, whereas it used 
to return as less than alphabetic characters. The older behaviour was 
consistent with Win2k.

The output below is from the following source:

---begin test program---
#include <windows.h>
#include <stdio.h>

char *test_strings[] =
{
        "_",
        "A",
        "a",
        "z",
        "Z",
        0
};


void
test_string(char *pch)
{
        char **ppch = test_strings;

        while (*ppch)
        {
                printf("%s\t%s\t%d\n", pch, *ppch, lstrcmpiA(pch, *ppch));
                ++ppch;
        }
}
int
main(int argc, char **argv)
{
        char **ppch = test_strings;

        while (*ppch)
                test_string(*ppch++);
        return 0;
}
---end test program---

---Wine output from immediately before the change---
_       _       0sorts
_       A       -1
_       a       -1
_       z       -1
_       Z       -1
A       _       1
A       A       0
A       a       0
A       z       -1
A       Z       -1
a       _       1
a       A       0
a       a       0
a       z       -1
a       Z       -1
z       _       1
z       A       1
z       a       1
z       z       0
z       Z       0
Z       _       1
Z       A       1
Z       a       1
Z       z       0
Z       Z       0
---End---

---Wine output from immediately after the change---
_       _       0
_       A       1
_       a       1
_       z       1
_       Z       1
A       _       -1
A       A       0
A       a       0
A       z       -1
A       Z       -1
a       _       -1
a       A       0
a       a       0
a       z       -1
a       Z       -1
z       _       -1
z       A       1
z       a       1
z       z       0
z       Z       0
Z       _       -1
Z       A       1
Z       a       1
Z       z       0
Z       Z       0
~---End---


Reply via email to