From f20c09fcd692515d12f211d2adce1792ca9d8556 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 4 Aug 2025 20:33:58 +0300 Subject: [PATCH] [LIBCNTPR] Implement NT versions of _strlwr, _strupr, _wcslwr, _wcsupr --- sdk/lib/crt/string/_strlwr_nt.c | 27 +++++++++++++++++++++++++ sdk/lib/crt/string/_strupr_nt.c | 33 +++++++++++++++++++++++++++++++ sdk/lib/crt/string/string.cmake | 6 ++++-- sdk/lib/crt/wstring/_wcslwr_nt.c | 33 +++++++++++++++++++++++++++++++ sdk/lib/crt/wstring/_wcsupr_nt.c | 27 +++++++++++++++++++++++++ sdk/lib/crt/wstring/wstring.cmake | 6 ++++-- 6 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 sdk/lib/crt/string/_strlwr_nt.c create mode 100644 sdk/lib/crt/string/_strupr_nt.c create mode 100644 sdk/lib/crt/wstring/_wcslwr_nt.c create mode 100644 sdk/lib/crt/wstring/_wcsupr_nt.c diff --git a/sdk/lib/crt/string/_strlwr_nt.c b/sdk/lib/crt/string/_strlwr_nt.c new file mode 100644 index 00000000000..b83f1b13609 --- /dev/null +++ b/sdk/lib/crt/string/_strlwr_nt.c @@ -0,0 +1,27 @@ +/* + * PROJECT: ReactOS NT CRT library + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Implementation of _strlwr + * COPYRIGHT: Copyright 2025 Timo Kreuzer + */ + +#include + +char* +__cdecl +_strlwr( + _Inout_z_ char* _String) +{ + char ch, *p; + + for (p = _String; *p; p++) + { + ch = *p; + if ((ch >= 'A') && (ch <= 'Z')) + { + *p += 'a' - 'A'; + } + } + + return _String; +} diff --git a/sdk/lib/crt/string/_strupr_nt.c b/sdk/lib/crt/string/_strupr_nt.c new file mode 100644 index 00000000000..dc488a8799c --- /dev/null +++ b/sdk/lib/crt/string/_strupr_nt.c @@ -0,0 +1,33 @@ +/* + * PROJECT: ReactOS NT CRT library + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Implementation of _strupr + * COPYRIGHT: Copyright 2025 Timo Kreuzer + */ + +#include "precomp.h" + +char* +__cdecl +_strupr( + _Inout_z_ char* _String) +{ + char ch, *p; + + if (_String == NULL) + { + _invalid_parameter(NULL, L"_strupr", _CRT_WIDE(__FILE__), __LINE__, 0); + return NULL; + } + + for (p = _String; *p; p++) + { + ch = *p; + if ((ch >= 'a') && (ch <= 'z')) + { + *p += 'A' - 'a'; + } + } + + return _String; +} diff --git a/sdk/lib/crt/string/string.cmake b/sdk/lib/crt/string/string.cmake index e239ea1f8e5..797683e1c0e 100644 --- a/sdk/lib/crt/string/string.cmake +++ b/sdk/lib/crt/string/string.cmake @@ -6,11 +6,9 @@ list(APPEND LIBCNTPR_STRING_SOURCE string/is_wctype.c string/scanf.c string/strcspn.c - string/strlwr.c string/strrev.c string/strset.c string/strstr.c - string/strupr.c string/strpbrk.c string/strspn.c string/atoi64.c @@ -95,12 +93,14 @@ list(APPEND CRT_STRING_SOURCE string/strerror.c string/stricmp.c string/string.c + string/strlwr.c string/strncoll.c string/strnicmp.c string/strtod.c string/strtok.c string/strtok_s.c string/strtoul.c + string/strupr.c string/strxfrm.c string/wcstombs_s.c string/wtof.c @@ -112,7 +112,9 @@ list(APPEND CRT_STRING_ASM_SOURCE list(APPEND LIBCNTPR_STRING_SOURCE string/_stricmp_nt.c + string/_strlwr_nt.c string/_strnicmp_nt.c + string/_strupr_nt.c string/iswctype_nt.c string/mbstowcs_nt.c string/tolower_nt.c diff --git a/sdk/lib/crt/wstring/_wcslwr_nt.c b/sdk/lib/crt/wstring/_wcslwr_nt.c new file mode 100644 index 00000000000..24f05746068 --- /dev/null +++ b/sdk/lib/crt/wstring/_wcslwr_nt.c @@ -0,0 +1,33 @@ +/* + * PROJECT: ReactOS NT CRT library + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Implementation of _wcslwr + * COPYRIGHT: Copyright 2025 Timo Kreuzer + */ + +#include "precomp.h" + +wchar_t* +__cdecl +_wcslwr( + _Inout_z_ wchar_t* _String) +{ + wchar_t ch, *p; + + if (_String == NULL) + { + _invalid_parameter(NULL, L"_wcslwr", _CRT_WIDE(__FILE__), __LINE__, 0); + return NULL; + } + + for (p = _String; *p; p++) + { + ch = *p; + if ((ch >= 'A') && (ch <= 'Z')) + { + *p += 'a' - 'A'; + } + } + + return _String; +} diff --git a/sdk/lib/crt/wstring/_wcsupr_nt.c b/sdk/lib/crt/wstring/_wcsupr_nt.c new file mode 100644 index 00000000000..cd3717a841d --- /dev/null +++ b/sdk/lib/crt/wstring/_wcsupr_nt.c @@ -0,0 +1,27 @@ +/* + * PROJECT: ReactOS NT CRT library + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Implementation of _wcsupr + * COPYRIGHT: Copyright 2025 Timo Kreuzer + */ + +#include + +wchar_t* +__cdecl +_wcsupr( + _Inout_z_ wchar_t* _String) +{ + wchar_t ch, *p; + + for (p = _String; *p; p++) + { + ch = *p; + if ((ch >= 'a') && (ch <= 'z')) + { + *p += 'A' - 'a'; + } + } + + return _String; +} diff --git a/sdk/lib/crt/wstring/wstring.cmake b/sdk/lib/crt/wstring/wstring.cmake index df6b0fac4dd..4af11bb6e86 100644 --- a/sdk/lib/crt/wstring/wstring.cmake +++ b/sdk/lib/crt/wstring/wstring.cmake @@ -1,7 +1,5 @@ list(APPEND LIBCNTPR_WSTRING_SOURCE - wstring/wcslwr.c - wstring/wcsupr.c wstring/wcscspn.c wstring/wcsspn.c wstring/wcsstr.c @@ -13,12 +11,16 @@ list(APPEND CRT_WSTRING_SOURCE wstring/wcrtomb.c wstring/wcscoll.c wstring/wcsicmp.c + wstring/wcslwr.c wstring/wcsnicmp.c wstring/wcstok.c + wstring/wcsupr.c wstring/wcsxfrm.c ) list(APPEND LIBCNTPR_WSTRING_SOURCE wstring/_wcsicmp_nt.c + wstring/_wcslwr_nt.c wstring/_wcsnicmp_nt.c + wstring/_wcsupr_nt.c )