[libc] Changed CharacterConverter returns (#146130)
changed internal CharacterConverter returns to return errno macro when necessary for consistency. --------- Co-authored-by: Sriya Pratipati <sriyap@google.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "hdr/errno_macros.h"
|
||||
#include "src/__support/error_or.h"
|
||||
#include "src/__support/wchar/character_converter.h"
|
||||
#include "src/__support/wchar/mbstate.h"
|
||||
@@ -87,7 +88,7 @@ TEST(LlvmLibcCharacterConverterUTF8To32Test, InvalidByte) {
|
||||
LIBC_NAMESPACE::internal::CharacterConverter char_conv(&state);
|
||||
int err = char_conv.push(static_cast<char8_t>(ch));
|
||||
|
||||
ASSERT_EQ(err, -1);
|
||||
ASSERT_EQ(err, EILSEQ);
|
||||
}
|
||||
|
||||
TEST(LlvmLibcCharacterConverterUTF8To32Test, InvalidMultiByte) {
|
||||
@@ -100,12 +101,12 @@ TEST(LlvmLibcCharacterConverterUTF8To32Test, InvalidMultiByte) {
|
||||
|
||||
LIBC_NAMESPACE::internal::CharacterConverter char_conv(&state);
|
||||
int err = char_conv.push(static_cast<char8_t>(ch[0]));
|
||||
ASSERT_EQ(err, -1);
|
||||
ASSERT_EQ(err, EILSEQ);
|
||||
err = char_conv.push(static_cast<char8_t>(ch[1]));
|
||||
ASSERT_EQ(err, 0);
|
||||
// Prev byte was single byte so trying to push another should error.
|
||||
err = char_conv.push(static_cast<char8_t>(ch[2]));
|
||||
ASSERT_EQ(err, -1);
|
||||
ASSERT_EQ(err, EILSEQ);
|
||||
err = char_conv.push(static_cast<char8_t>(ch[3]));
|
||||
ASSERT_EQ(err, 0);
|
||||
}
|
||||
@@ -127,7 +128,7 @@ TEST(LlvmLibcCharacterConverterUTF8To32Test, InvalidLastByte) {
|
||||
err = char_conv.push(static_cast<char8_t>(ch[2]));
|
||||
ASSERT_EQ(err, 0);
|
||||
err = char_conv.push(static_cast<char8_t>(ch[3]));
|
||||
ASSERT_EQ(err, -1);
|
||||
ASSERT_EQ(err, EILSEQ);
|
||||
}
|
||||
|
||||
TEST(LlvmLibcCharacterConverterUTF8To32Test, ValidTwoByteWithExtraRead) {
|
||||
@@ -144,7 +145,7 @@ TEST(LlvmLibcCharacterConverterUTF8To32Test, ValidTwoByteWithExtraRead) {
|
||||
ASSERT_EQ(err, 0);
|
||||
// Should produce an error on 3rd byte
|
||||
err = char_conv.push(static_cast<char8_t>(ch[2]));
|
||||
ASSERT_EQ(err, -1);
|
||||
ASSERT_EQ(err, EILSEQ);
|
||||
|
||||
// Should produce an error since mbstate was reset
|
||||
auto wch = char_conv.pop_utf32();
|
||||
|
||||
Reference in New Issue
Block a user