Skip to content

Commit 7872c0d

Browse files
committed
[LIBCNTPR] Implement NT versions of _stricmp and _strnicmp
1 parent ac63cef commit 7872c0d

File tree

3 files changed

+92
-2
lines changed

3 files changed

+92
-2
lines changed

sdk/lib/crt/string/_stricmp_nt.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* PROJECT: ReactOS NT CRT library
3+
* LICENSE: MIT (https://spdx.org/licenses/MIT)
4+
* PURPOSE: Implementation of _stricmp
5+
* COPYRIGHT: Copyright 2025 Timo Kreuzer <[email protected]>
6+
*/
7+
8+
#include <string.h>
9+
10+
_Check_return_
11+
int
12+
__cdecl
13+
_stricmp(
14+
_In_z_ char const* _String1,
15+
_In_z_ char const* _String2)
16+
{
17+
char const* p1 = _String1;
18+
char const* p2 = _String2;
19+
char chr1, chr2;
20+
21+
while (1)
22+
{
23+
chr1 = *p1++;
24+
chr2 = *p2++;
25+
26+
if (chr1 != chr2)
27+
{
28+
if ((chr1 >= 'A') && (chr1 <= 'Z'))
29+
chr1 += ('a' - 'A');
30+
if ((chr2 >= 'A') && (chr2 <= 'Z'))
31+
chr2 += ('a' - 'A');
32+
33+
if (chr1 != chr2)
34+
return chr1 - chr2;
35+
}
36+
else if (chr1 == 0)
37+
{
38+
break;
39+
}
40+
}
41+
42+
return 0;
43+
}

sdk/lib/crt/string/_strnicmp_nt.c

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* PROJECT: ReactOS NT CRT library
3+
* LICENSE: MIT (https://spdx.org/licenses/MIT)
4+
* PURPOSE: Implementation of _strnicmp
5+
* COPYRIGHT: Copyright 2025 Timo Kreuzer <[email protected]>
6+
*/
7+
8+
#include <string.h>
9+
10+
_Check_return_
11+
int
12+
__cdecl
13+
_strnicmp(
14+
_In_reads_or_z_(_MaxCount) char const* _String1,
15+
_In_reads_or_z_(_MaxCount) char const* _String2,
16+
_In_ size_t _MaxCount)
17+
{
18+
char const* p1 = _String1;
19+
char const* p2 = _String2;
20+
size_t remaining = _MaxCount;
21+
char chr1, chr2;
22+
23+
while (remaining-- != 0)
24+
{
25+
chr1 = *p1++;
26+
chr2 = *p2++;
27+
28+
if (chr1 != chr2)
29+
{
30+
if ((chr1 >= 'A') && (chr1 <= 'Z'))
31+
chr1 += ('a' - 'A');
32+
if ((chr2 >= 'A') && (chr2 <= 'Z'))
33+
chr2 += ('a' - 'A');
34+
35+
if (chr1 != chr2)
36+
return chr1 - chr2;
37+
}
38+
else if (chr1 == 0)
39+
{
40+
break;
41+
}
42+
}
43+
44+
return 0;
45+
}

sdk/lib/crt/string/string.cmake

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ list(APPEND LIBCNTPR_STRING_SOURCE
66
string/is_wctype.c
77
string/scanf.c
88
string/strcspn.c
9-
string/stricmp.c
10-
string/strnicmp.c
119
string/strlwr.c
1210
string/strrev.c
1311
string/strset.c
@@ -95,8 +93,10 @@ list(APPEND CRT_STRING_SOURCE
9593
string/strcoll.c
9694
string/strdup.c
9795
string/strerror.c
96+
string/stricmp.c
9897
string/string.c
9998
string/strncoll.c
99+
string/strnicmp.c
100100
string/strtod.c
101101
string/strtok.c
102102
string/strtok_s.c
@@ -111,6 +111,8 @@ list(APPEND CRT_STRING_ASM_SOURCE
111111
)
112112

113113
list(APPEND LIBCNTPR_STRING_SOURCE
114+
string/_stricmp_nt.c
115+
string/_strnicmp_nt.c
114116
string/iswctype_nt.c
115117
string/mbstowcs_nt.c
116118
string/tolower_nt.c

0 commit comments

Comments
 (0)