Skip to content

Conversation

@sribee8
Copy link
Contributor

@sribee8 sribee8 commented Jun 27, 2025

changed internal CharacterConverter returns to return errno macro when necessary for consistency.

changed internal CharacterConverter returns to return errno macro when necessary for consistency.
@llvmbot llvmbot added the libc label Jun 27, 2025
@sribee8 sribee8 requested a review from uzairnawaz June 27, 2025 18:17
@llvmbot
Copy link
Member

llvmbot commented Jun 27, 2025

@llvm/pr-subscribers-libc

Author: None (sribee8)

Changes

changed internal CharacterConverter returns to return errno macro when necessary for consistency.


Full diff: https://github.com/llvm/llvm-project/pull/146130.diff

4 Files Affected:

  • (modified) libc/src/__support/wchar/CMakeLists.txt (+1)
  • (modified) libc/src/__support/wchar/character_converter.cpp (+4-3)
  • (modified) libc/src/__support/wchar/mbrtowc.cpp (+2-2)
  • (modified) libc/src/__support/wchar/wcrtomb.cpp (+1-4)
diff --git a/libc/src/__support/wchar/CMakeLists.txt b/libc/src/__support/wchar/CMakeLists.txt
index 86a47319f278a..d3fb58ed0c71c 100644
--- a/libc/src/__support/wchar/CMakeLists.txt
+++ b/libc/src/__support/wchar/CMakeLists.txt
@@ -13,6 +13,7 @@ add_object_library(
   SRCS 
     character_converter.cpp
   DEPENDS
+    libc.hdr.errno_macros
     libc.hdr.types.char8_t
     libc.hdr.types.char32_t
     libc.src.__support.error_or
diff --git a/libc/src/__support/wchar/character_converter.cpp b/libc/src/__support/wchar/character_converter.cpp
index c54a1b751f402..3cacfa5689e4d 100644
--- a/libc/src/__support/wchar/character_converter.cpp
+++ b/libc/src/__support/wchar/character_converter.cpp
@@ -6,6 +6,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "hdr/errno_macros.h"
 #include "hdr/types/char32_t.h"
 #include "hdr/types/char8_t.h"
 #include "src/__support/CPP/bit.h"
@@ -76,7 +77,7 @@ int CharacterConverter::push(char8_t utf8_byte) {
     else {
       // bytes_stored and total_bytes will always be 0 here
       state->partial = static_cast<char32_t>(0);
-      return -1;
+      return EILSEQ;
     }
     state->partial = static_cast<char32_t>(utf8_byte);
     state->bytes_stored++;
@@ -93,7 +94,7 @@ int CharacterConverter::push(char8_t utf8_byte) {
   }
   // Invalid byte -> reset the state
   clear();
-  return -1;
+  return EILSEQ;
 }
 
 int CharacterConverter::push(char32_t utf32) {
@@ -115,7 +116,7 @@ int CharacterConverter::push(char32_t utf32) {
   // `utf32` contains a value that is too large to actually represent a valid
   // unicode character
   clear();
-  return -1;
+  return EILSEQ;
 }
 
 ErrorOr<char32_t> CharacterConverter::pop_utf32() {
diff --git a/libc/src/__support/wchar/mbrtowc.cpp b/libc/src/__support/wchar/mbrtowc.cpp
index 3b8f7666026c3..90ba934c42b69 100644
--- a/libc/src/__support/wchar/mbrtowc.cpp
+++ b/libc/src/__support/wchar/mbrtowc.cpp
@@ -32,8 +32,8 @@ ErrorOr<size_t> mbrtowc(wchar_t *__restrict pwc, const char *__restrict s,
   for (; i < n && !char_conv.isFull(); ++i) {
     int err = char_conv.push(static_cast<char8_t>(s[i]));
     // Encoding error
-    if (err == -1)
-      return Error(EILSEQ);
+    if (err == EILSEQ)
+      return Error(err);
   }
   auto wc = char_conv.pop_utf32();
   if (wc.has_value()) {
diff --git a/libc/src/__support/wchar/wcrtomb.cpp b/libc/src/__support/wchar/wcrtomb.cpp
index a74a6f3ec34a6..fc54bbfc93e0c 100644
--- a/libc/src/__support/wchar/wcrtomb.cpp
+++ b/libc/src/__support/wchar/wcrtomb.cpp
@@ -30,12 +30,9 @@ ErrorOr<size_t> wcrtomb(char *__restrict s, wchar_t wc,
   if (!cr.isValidState())
     return Error(EINVAL);
 
-  if (s == nullptr)
-    return Error(EILSEQ);
-
   int status = cr.push(static_cast<char32_t>(wc));
   if (status != 0)
-    return Error(EILSEQ);
+    return Error(status);
 
   size_t count = 0;
   while (!cr.isEmpty()) {

@sribee8 sribee8 requested a review from michaelrj-google June 27, 2025 18:17
Copy link
Contributor

@uzairnawaz uzairnawaz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@sribee8 sribee8 merged commit f58caed into llvm:main Jun 27, 2025
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants