On Tue, Oct 16, 2012 at 12:38:51PM +0200, Jacek Caban wrote:
--- dlls/ntdll/string.c | 12 +++++++++++- dlls/ntdll/tests/string.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletions(-)
diff --git a/dlls/ntdll/string.c b/dlls/ntdll/string.c index 716dbdf..288e910 100644 --- a/dlls/ntdll/string.c +++ b/dlls/ntdll/string.c @@ -254,7 +254,17 @@ int __cdecl _stricmp( LPCSTR str1, LPCSTR str2 ) */ int __cdecl _strnicmp( LPCSTR str1, LPCSTR str2, size_t n ) { - return strncasecmp( str1, str2, n ); + int ret = 0; + + /* 32-bit Windows return only -1,0,1 values */ + while(n--) { + if(!*str1) + return sizeof(void*) == 4 ? (*str2 ? -1 : 0) : -(unsigned char)*str2; + if((ret = tolower(*str1++) - tolower(*str2++))) + return sizeof(void*) == 4 ? (ret > 0 ? 1 : -1) : ret; + }
Errm. Why not int ret = strncasecmp( str1, str2, n ); if (ret < 0 ) return -1; if (ret > 0 ) return 1; return 0; Ciao, Marcus