77// ===----------------------------------------------------------------------===//
88
99#include " hdr/types/wchar_t.h"
10+ #include " src/__support/libc_errno.h"
1011#include " src/wchar/mbtowc.h"
1112#include " test/UnitTest/Test.h"
1213
@@ -20,6 +21,7 @@ TEST(LlvmLibcMBToWC, OneByte) {
2021 // Should fail since we have not read enough
2122 n = LIBC_NAMESPACE::mbtowc (dest, ch, 0 );
2223 ASSERT_EQ (n, -1 );
24+ ASSERT_EQ (static_cast <int >(libc_errno), EILSEQ);
2325}
2426
2527TEST (LlvmLibcMBToWC, TwoByte) {
@@ -36,6 +38,7 @@ TEST(LlvmLibcMBToWC, TwoByte) {
3638 // Should fail after trying to read next byte too
3739 n = LIBC_NAMESPACE::mbtowc (dest, ch + 1 , 1 );
3840 ASSERT_EQ (n, -1 );
41+ ASSERT_EQ (static_cast <int >(libc_errno), EILSEQ);
3942}
4043
4144TEST (LlvmLibcMBToWC, ThreeByte) {
@@ -49,6 +52,7 @@ TEST(LlvmLibcMBToWC, ThreeByte) {
4952 // Should fail since we have not read enough
5053 n = LIBC_NAMESPACE::mbtowc (dest, ch, 2 );
5154 ASSERT_EQ (n, -1 );
55+ ASSERT_EQ (static_cast <int >(libc_errno), EILSEQ);
5256}
5357
5458TEST (LlvmLibcMBToWC, FourByte) {
@@ -63,13 +67,15 @@ TEST(LlvmLibcMBToWC, FourByte) {
6367 // Should fail since we have not read enough
6468 n = LIBC_NAMESPACE::mbtowc (dest, ch, 2 );
6569 ASSERT_EQ (n, -1 );
70+ ASSERT_EQ (static_cast <int >(libc_errno), EILSEQ);
6671}
6772
6873TEST (LlvmLibcMBToWC, InvalidByte) {
6974 const char ch[1 ] = {static_cast <char >(0x80 )};
7075 wchar_t dest[2 ];
7176 int n = LIBC_NAMESPACE::mbtowc (dest, ch, 1 );
7277 ASSERT_EQ (n, -1 );
78+ ASSERT_EQ (static_cast <int >(libc_errno), EILSEQ);
7379}
7480
7581TEST (LlvmLibcMBToWC, InvalidMultiByte) {
@@ -80,6 +86,8 @@ TEST(LlvmLibcMBToWC, InvalidMultiByte) {
8086 // Trying to push all 4 should error
8187 int n = LIBC_NAMESPACE::mbtowc (dest, ch, 4 );
8288 ASSERT_EQ (n, -1 );
89+ ASSERT_EQ (static_cast <int >(libc_errno), EILSEQ);
90+
8391 // Trying to push the second and third should correspond to null wc
8492 n = LIBC_NAMESPACE::mbtowc (dest, ch + 1 , 2 );
8593 ASSERT_EQ (n, 0 );
@@ -95,6 +103,7 @@ TEST(LlvmLibcMBToWC, InvalidLastByte) {
95103 // Trying to push all 4 should error
96104 int n = LIBC_NAMESPACE::mbtowc (dest, ch, 4 );
97105 ASSERT_EQ (n, -1 );
106+ ASSERT_EQ (static_cast <int >(libc_errno), EILSEQ);
98107}
99108
100109TEST (LlvmLibcMBToWC, ValidTwoByteWithExtraRead) {
@@ -130,3 +139,13 @@ TEST(LlvmLibcMBToWC, NullString) {
130139 n = LIBC_NAMESPACE::mbtowc (dest, ch, 1 );
131140 ASSERT_EQ (n, 0 );
132141}
142+
143+ TEST (LlvmLibcMBToWC, NullWCPtr) {
144+ const char ch[2 ] = {
145+ static_cast <char >(0xC2 ),
146+ static_cast <char >(0x8E ),
147+ };
148+ // a null destination should still return the number of read bytes
149+ int n = LIBC_NAMESPACE::mbtowc (nullptr , ch, 2 );
150+ ASSERT_EQ (n, 2 );
151+ }
0 commit comments