[LIBCNTPR] Implement NT version of _wcsicmp / _wcsnicmp

Passes all ntdll wine tests.
This commit is contained in:
Timo Kreuzer
2025-07-31 02:56:27 +03:00
parent ae3eb6cb36
commit abfaf2e75f
3 changed files with 95 additions and 2 deletions

View File

@@ -0,0 +1,43 @@
/*
* PROJECT: ReactOS NT CRT library
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Implementation of _wcsicmp
* COPYRIGHT: Copyright 2025 Timo Kreuzer <timo.kreuzer@reactos.org>
*/
#include <string.h>
_Check_return_
int
__cdecl
_wcsicmp(
_In_z_ wchar_t const* _String1,
_In_z_ wchar_t const* _String2)
{
wchar_t const* p1 = _String1;
wchar_t const* p2 = _String2;
wchar_t chr1, chr2;
while (1)
{
chr1 = *p1++;
chr2 = *p2++;
if (chr1 != chr2)
{
if ((chr1 >= 'A') && (chr1 <= 'Z'))
chr1 += ('a' - 'A');
if ((chr2 >= 'A') && (chr2 <= 'Z'))
chr2 += ('a' - 'A');
if (chr1 != chr2)
return chr1 - chr2;
}
else if (chr1 == 0)
{
break;
}
}
return 0;
}

View File

@@ -0,0 +1,45 @@
/*
* PROJECT: ReactOS NT CRT library
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Implementation of _wcsnicmp
* COPYRIGHT: Copyright 2025 Timo Kreuzer <timo.kreuzer@reactos.org>
*/
#include <string.h>
_Check_return_
int
__cdecl
_wcsnicmp(
_In_reads_or_z_(_MaxCount) wchar_t const* _String1,
_In_reads_or_z_(_MaxCount) wchar_t const* _String2,
_In_ size_t _MaxCount)
{
wchar_t const* p1 = _String1;
wchar_t const* p2 = _String2;
size_t remaining = _MaxCount;
wchar_t chr1, chr2;
while (remaining-- != 0)
{
chr1 = *p1++;
chr2 = *p2++;
if (chr1 != chr2)
{
if ((chr1 >= 'A') && (chr1 <= 'Z'))
chr1 += ('a' - 'A');
if ((chr2 >= 'A') && (chr2 <= 'Z'))
chr2 += ('a' - 'A');
if (chr1 != chr2)
return chr1 - chr2;
}
else if (chr1 == 0)
{
break;
}
}
return 0;
}

View File

@@ -1,8 +1,6 @@
list(APPEND LIBCNTPR_WSTRING_SOURCE
wstring/wcsicmp.c
wstring/wcslwr.c
wstring/wcsnicmp.c
wstring/wcsupr.c
wstring/wcscspn.c
wstring/wcsspn.c
@@ -14,6 +12,13 @@ list(APPEND CRT_WSTRING_SOURCE
wstring/mbrtowc.c
wstring/wcrtomb.c
wstring/wcscoll.c
wstring/wcsicmp.c
wstring/wcsnicmp.c
wstring/wcstok.c
wstring/wcsxfrm.c
)
list(APPEND LIBCNTPR_WSTRING_SOURCE
wstring/_wcsicmp_nt.c
wstring/_wcsnicmp_nt.c
)