Explorar o código

LibC: Implement wmemcpy

Tim Schumacher %!s(int64=3) %!d(string=hai) anos
pai
achega
485c0ef691

+ 17 - 0
Tests/LibC/TestWchar.cpp

@@ -6,6 +6,7 @@
 
 
 #include <LibTest/TestCase.h>
 #include <LibTest/TestCase.h>
 
 
+#include <string.h>
 #include <wchar.h>
 #include <wchar.h>
 
 
 TEST_CASE(wcspbrk)
 TEST_CASE(wcspbrk)
@@ -97,6 +98,22 @@ TEST_CASE(wmemchr)
     EXPECT_EQ(ret, input + 6);
     EXPECT_EQ(ret, input + 6);
 }
 }
 
 
+TEST_CASE(wmemcpy)
+{
+    const wchar_t* input = L"abc\0def";
+    auto buf = static_cast<wchar_t*>(malloc(8 * sizeof(wchar_t)));
+
+    if (!buf) {
+        FAIL("Could not allocate space for copy target");
+        return;
+    }
+
+    wchar_t* ret = wmemcpy(buf, input, 8);
+
+    EXPECT_EQ(ret, buf);
+    EXPECT_EQ(memcmp(buf, input, 8 * sizeof(wchar_t)), 0);
+}
+
 TEST_CASE(wcscoll)
 TEST_CASE(wcscoll)
 {
 {
     // Check if wcscoll is sorting correctly. At the moment we are doing raw char comparisons,
     // Check if wcscoll is sorting correctly. At the moment we are doing raw char comparisons,

+ 8 - 0
Userland/Libraries/LibC/wchar.cpp

@@ -385,4 +385,12 @@ wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n)
 
 
     return nullptr;
     return nullptr;
 }
 }
+
+wchar_t* wmemcpy(wchar_t* dest, const wchar_t* src, size_t n)
+{
+    for (size_t i = 0; i < n; i++)
+        dest[i] = src[i];
+
+    return dest;
+}
 }
 }

+ 1 - 0
Userland/Libraries/LibC/wchar.h

@@ -44,5 +44,6 @@ int mbsinit(const mbstate_t*);
 wchar_t* wcspbrk(const wchar_t*, const wchar_t*);
 wchar_t* wcspbrk(const wchar_t*, const wchar_t*);
 wchar_t* wcsstr(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* wmemchr(const wchar_t*, wchar_t, size_t);
+wchar_t* wmemcpy(wchar_t*, const wchar_t*, size_t);
 
 
 __END_DECLS
 __END_DECLS