mirror of
https://github.com/reactos/reactos.git
synced 2026-06-09 17:33:50 +08:00
[LIBCNTPR] Implement NT version of _wcsicmp / _wcsnicmp
Passes all ntdll wine tests.
This commit is contained in:
43
sdk/lib/crt/wstring/_wcsicmp_nt.c
Normal file
43
sdk/lib/crt/wstring/_wcsicmp_nt.c
Normal 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;
|
||||
}
|
||||
45
sdk/lib/crt/wstring/_wcsnicmp_nt.c
Normal file
45
sdk/lib/crt/wstring/_wcsnicmp_nt.c
Normal 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;
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user