diff --git a/Tests/LibC/TestWchar.cpp b/Tests/LibC/TestWchar.cpp index 776f776386..770a4da82c 100644 --- a/Tests/LibC/TestWchar.cpp +++ b/Tests/LibC/TestWchar.cpp @@ -114,6 +114,29 @@ TEST_CASE(wmemcpy) EXPECT_EQ(memcmp(buf, input, 8 * sizeof(wchar_t)), 0); } +TEST_CASE(wmemset) +{ + auto buf_length = 8; + auto buf = static_cast(calloc(buf_length, sizeof(wchar_t))); + + if (!buf) { + FAIL("Could not allocate memory for target buffer"); + return; + } + + wchar_t* ret = wmemset(buf, L'\U0001f41e', buf_length - 1); + + EXPECT_EQ(ret, buf); + + for (int i = 0; i < buf_length - 1; i++) { + EXPECT_EQ(buf[i], L'\U0001f41e'); + } + + EXPECT_EQ(buf[buf_length - 1], L'\0'); + + free(buf); +} + TEST_CASE(wcscoll) { // Check if wcscoll is sorting correctly. At the moment we are doing raw char comparisons, diff --git a/Userland/Libraries/LibC/wchar.cpp b/Userland/Libraries/LibC/wchar.cpp index 052ab8b1cc..13208004c2 100644 --- a/Userland/Libraries/LibC/wchar.cpp +++ b/Userland/Libraries/LibC/wchar.cpp @@ -393,4 +393,13 @@ wchar_t* wmemcpy(wchar_t* dest, const wchar_t* src, size_t n) return dest; } + +wchar_t* wmemset(wchar_t* wcs, wchar_t wc, size_t n) +{ + for (size_t i = 0; i < n; i++) { + wcs[i] = wc; + } + + return wcs; +} } diff --git a/Userland/Libraries/LibC/wchar.h b/Userland/Libraries/LibC/wchar.h index a622906218..7f731ad38b 100644 --- a/Userland/Libraries/LibC/wchar.h +++ b/Userland/Libraries/LibC/wchar.h @@ -45,5 +45,6 @@ wchar_t* wcspbrk(const wchar_t*, const wchar_t*); wchar_t* wcsstr(const wchar_t*, const wchar_t*); wchar_t* wmemchr(const wchar_t*, wchar_t, size_t); wchar_t* wmemcpy(wchar_t*, const wchar_t*, size_t); +wchar_t* wmemset(wchar_t*, wchar_t, size_t); __END_DECLS