From f55d6b11c5638f7433088b10b7f87723b036c72c Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 27 May 2025 07:14:57 +0300 Subject: [PATCH] LibC: Implement `mblen` --- userspace/libraries/LibC/stdlib.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/userspace/libraries/LibC/stdlib.cpp b/userspace/libraries/LibC/stdlib.cpp index 3549db4e2b..42056228d7 100644 --- a/userspace/libraries/LibC/stdlib.cpp +++ b/userspace/libraries/LibC/stdlib.cpp @@ -547,6 +547,26 @@ char* ptsname(int fildes) return buffer; } +int mblen(const char* s, size_t n) +{ + if (s == nullptr) + return 0; + if (n == 0) + return -1; + switch (__getlocale(LC_CTYPE)) + { + case LOCALE_INVALID: + ASSERT_NOT_REACHED(); + case LOCALE_POSIX: + return 1; + case LOCALE_UTF8: + if (const auto bytes = BAN::UTF8::byte_length(*s); n >= bytes) + return bytes; + return -1; + } + ASSERT_NOT_REACHED(); +} + size_t mbstowcs(wchar_t* __restrict pwcs, const char* __restrict s, size_t n) { auto* us = reinterpret_cast(s);