From 6beefccfa50feb24e6c3c498d80896709fa89d4e Mon Sep 17 00:00:00 2001 From: Feuris Date: Tue, 13 Oct 2026 21:35:45 -0300 Subject: [PATCH] feat(libc): implement wcsnlen_s --- core/libs/prx/libc/src/Strings.cpp | 7 +++++++ core/libs/tests/GuestWideStrings.cpp | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/core/libs/prx/libc/src/Strings.cpp b/core/libs/prx/libc/src/Strings.cpp index c0f6747057..1a4215cf35 100644 --- a/core/libs/prx/libc/src/Strings.cpp +++ b/core/libs/prx/libc/src/Strings.cpp @@ -400,6 +400,13 @@ size_t APS5_VABI wcslen_nid_postfix(const char16_t* s) { return Length(s); } +size_t APS5_VABI wcsnlen_s_nid_postfix(const char16_t* s, size_t maxlen) { + if (!s) return 0; + size_t length = 0; + while (length < maxlen && s[length] != 0) ++length; + return length; +} + int APS5_VABI wcscmp_nid_postfix(const char16_t* s1, const char16_t* s2) { for (; *s1 == *s2; ++s1, ++s2) { if (*s1 == 0) return 0; diff --git a/core/libs/tests/GuestWideStrings.cpp b/core/libs/tests/GuestWideStrings.cpp index 101ea50e68..39b16ff31e 100644 --- a/core/libs/tests/GuestWideStrings.cpp +++ b/core/libs/tests/GuestWideStrings.cpp @@ -15,6 +15,7 @@ int APS5_VABI wmemcmp_nid_postfix(const char16_t* s1, const char16_t* s2, std::s char16_t* APS5_VABI wmemcpy_nid_postfix(char16_t* dest, const char16_t* src, std::size_t n); char16_t* APS5_VABI wmemmove_nid_postfix(char16_t* dest, const char16_t* src, std::size_t n); std::size_t APS5_VABI wcslen_nid_postfix(const char16_t* s); +std::size_t APS5_VABI wcsnlen_s_nid_postfix(const char16_t* s, std::size_t maxlen); int APS5_VABI wcscmp_nid_postfix(const char16_t* s1, const char16_t* s2); int APS5_VABI wcsncmp_nid_postfix(const char16_t* s1, const char16_t* s2, std::size_t n); char16_t* APS5_VABI wcscpy_nid_postfix(char16_t* dest, const char16_t* src); @@ -59,6 +60,13 @@ int main() { require(wcslen_nid_postfix(u"héllo") == 5); require(wcslen_nid_postfix(split) == 2); + require(wcsnlen_s_nid_postfix(nullptr, 10) == 0); + require(wcsnlen_s_nid_postfix(u"", 5) == 0); + require(wcsnlen_s_nid_postfix(u"héllo", 0) == 0); + require(wcsnlen_s_nid_postfix(u"héllo", 3) == 3); + require(wcsnlen_s_nid_postfix(u"héllo", 10) == 5); + require(wcsnlen_s_nid_postfix(split, 4) == 2); + require(wcscmp_nid_postfix(u"abc", u"abc") == 0); require(wcscmp_nid_postfix(u"abc", u"abd") < 0); require(wcscmp_nid_postfix(u"abd", u"abc") > 0);