Author: enh-google
Date: 2025-07-02T14:13:00-04:00
New Revision: b1bb298246aa96f413625bf2fccdf11d1b329ae7

URL: 
https://github.com/llvm/llvm-project/commit/b1bb298246aa96f413625bf2fccdf11d1b329ae7
DIFF: 
https://github.com/llvm/llvm-project/commit/b1bb298246aa96f413625bf2fccdf11d1b329ae7.diff

LOG: Revert "Revert "Fix wcpncpy() return value; add test." (#146752)"

This reverts commit 77d95911a3a4dc7445280cd5ee217e2a47a41b47.

Added: 
    

Modified: 
    libc/src/wchar/wcpncpy.cpp
    libc/test/src/wchar/wcpncpy_test.cpp

Removed: 
    


################################################################################
diff  --git a/libc/src/wchar/wcpncpy.cpp b/libc/src/wchar/wcpncpy.cpp
index 9f451b73f07cb..0e729db7abf60 100644
--- a/libc/src/wchar/wcpncpy.cpp
+++ b/libc/src/wchar/wcpncpy.cpp
@@ -28,8 +28,9 @@ LLVM_LIBC_FUNCTION(wchar_t *, wcpncpy,
   for (i = 0; i < n && s2[i] != '\0'; ++i)
     s1[i] = s2[i];
   // When n>strlen(src), n-strlen(src) \0 are appended.
-  for (; i < n; ++i)
-    s1[i] = L'\0';
+  for (size_t j = i; j < n; ++j)
+    s1[j] = L'\0';
+  // ...but our result points to the first \0 (if any).
   return s1 + i;
 }
 

diff  --git a/libc/test/src/wchar/wcpncpy_test.cpp 
b/libc/test/src/wchar/wcpncpy_test.cpp
index 98738e230e32d..5ce3e8ce7cd93 100644
--- a/libc/test/src/wchar/wcpncpy_test.cpp
+++ b/libc/test/src/wchar/wcpncpy_test.cpp
@@ -75,6 +75,15 @@ TEST(LlvmLibcWCPNCpyTest, CopyTwoWithNull) {
   ASSERT_EQ(dest + 2, res);
 }
 
+TEST(LlvmLibcWCPNCpyTest, CopyAndFill) {
+  wchar_t dest[] = {L'a', L'b', L'c'};
+  wchar_t *res = LIBC_NAMESPACE::wcpncpy(dest, L"x", 3);
+  ASSERT_TRUE(dest[0] == L'x');
+  ASSERT_TRUE(dest[1] == L'\0');
+  ASSERT_TRUE(dest[2] == L'\0');
+  ASSERT_EQ(dest + 1, res);
+}
+
 #if defined(LIBC_ADD_NULL_CHECKS) && !defined(LIBC_HAS_SANITIZER)
 TEST(LlvmLibcWCPNCpyTest, NullptrCrash) {
   // Passing in a nullptr should crash the program.


        
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to