Skip to content

Commit 1dd65af

Browse files
committed
Add IO error test cases for file variants
1 parent 4761e9a commit 1dd65af

File tree

4 files changed

+14
-2
lines changed

4 files changed

+14
-2
lines changed

libc/src/stdio/printf_core/vasprintf_internal.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ LIBC_INLINE PrintfResult vasprintf_internal(char **ret,
5959
if (wb.buff == init_buff_on_stack) {
6060
*ret = static_cast<char *>(malloc(ret_val.value + 1));
6161
if (ret == nullptr)
62-
return -ENOMEM;
62+
return {0, ENOMEM};
6363
inline_memcpy(*ret, wb.buff, ret_val.value);
6464
} else {
6565
*ret = wb.buff;
6666
}
67-
(*ret)[ret_val.value] = '\0'; // TODO OK HERE or overflow
67+
(*ret)[ret_val.value] = '\0';
6868
return ret_val;
6969
}
7070
} // namespace printf_core

libc/test/src/stdio/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ add_libc_test(
186186
fprintf_test.cpp
187187
DEPENDS
188188
libc.src.stdio.fprintf
189+
libc.test.UnitTest.ErrnoCheckingTest
190+
libc.test.UnitTest.ErrnoSetterMatcher
189191
${fprintf_test_deps}
190192
COMPILE_OPTIONS
191193
${use_system_file}

libc/test/src/stdio/fprintf_test.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#include "src/stdio/fprintf.h"
1717

1818
#include "test/UnitTest/Test.h"
19+
#include "test/UnitTest/ErrnoCheckingTest.h"
20+
#include "test/UnitTest/ErrnoSetterMatcher.h"
1921

2022
namespace printf_test {
2123
#ifndef LIBC_COPT_STDIO_USE_SYSTEM_FILE
@@ -31,6 +33,8 @@ using ::fread;
3133
#endif // LIBC_COPT_STDIO_USE_SYSTEM_FILE
3234
} // namespace printf_test
3335

36+
using LlvmLibcFPrintfTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
37+
3438
TEST(LlvmLibcFPrintfTest, WriteToFile) {
3539
const char *FILENAME = APPEND_LIBC_TEST("fprintf_output.test");
3640
auto FILE_PATH = libc_make_test_file_path(FILENAME);
@@ -78,6 +82,7 @@ TEST(LlvmLibcFPrintfTest, WriteToFile) {
7882
written =
7983
LIBC_NAMESPACE::fprintf(file, "Writing to a read only file should fail.");
8084
EXPECT_LT(written, 0);
85+
ASSERT_ERRNO_EQ(EIO);
8186

8287
ASSERT_EQ(printf_test::fclose(file), 0);
8388
}

libc/test/src/stdio/vfprintf_test.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#include "src/stdio/vfprintf.h"
2121

2222
#include "test/UnitTest/Test.h"
23+
#include "test/UnitTest/ErrnoCheckingTest.h"
24+
#include "test/UnitTest/ErrnoSetterMatcher.h"
2325

2426
namespace printf_test {
2527
#ifndef LIBC_COPT_STDIO_USE_SYSTEM_FILE
@@ -44,6 +46,8 @@ int call_vfprintf(::FILE *__restrict stream, const char *__restrict format,
4446
return ret;
4547
}
4648

49+
using LlvmLibcVFPrintfTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
50+
4751
TEST(LlvmLibcVFPrintfTest, WriteToFile) {
4852
const char *FILENAME = APPEND_LIBC_TEST("vfprintf_output.test");
4953
auto FILE_PATH = libc_make_test_file_path(FILENAME);
@@ -90,6 +94,7 @@ TEST(LlvmLibcVFPrintfTest, WriteToFile) {
9094

9195
written = call_vfprintf(file, "Writing to a read only file should fail.");
9296
EXPECT_LT(written, 0);
97+
ASSERT_ERRNO_EQ(EIO);
9398

9499
ASSERT_EQ(printf_test::fclose(file), 0);
95100
}

0 commit comments

Comments
 (0)