Regression in lstrcmpiA (occurred in late June, NLS related)

Troy Rollo wine at troy.rollo.name
Wed Oct 1 02:30:22 CDT 2003


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---




More information about the wine-devel mailing list