Re: kernel32: Fix lstrcmp(i)A/W to correct return values and document this behaviour
"Rolf Kalbermatter" <rolf.kalbermatter(a)citeng.com> wrote:
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2) { - int ret = CompareStringA(GetThreadLocale(), 0, str1, -1, str2, -1); - if (ret) ret -= 2; - return ret; + int ret = CompareStringA(GetThreadLocale(), 0, str1, -1, str2, -1); + if (!ret) + { + ret = CompareStringA(GetSystemDefaultLCID(), 0, str1, -1, str2, -1); + if (!ret) + { + if (!str1) + return (str2 ? -1 : 0); + else if (!str2) + return 1; + return strcasecmp(str1, str2); + } + } + return ret - 2; }
Windows doesn't do anything of the above. A patch for CompareString I sent recently to wine-devel has lots of tests and fixes for all the differences we have found so far. It just needs a clean approach for unicode.org/windows collation table differences merge to be included in Wine. -- Dmitry.
participants (1)
-
Dmitry Timoshkov