From 05a886d00538f54445d51ae9749e289faace6e60 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 27 Apr 2024 01:33:18 -0400 Subject: [PATCH 01/23] Revert "Revert "[libc] implement ioctl" (#88226)" This reverts commit 3c2feab7d152b7f161b4adaecef4ec81f038a23e. --- libc/config/linux/aarch64/entrypoints.txt | 3 ++ libc/config/linux/riscv/entrypoints.txt | 3 ++ libc/config/linux/x86_64/entrypoints.txt | 3 ++ libc/spec/linux.td | 18 ++++++++++ libc/src/sys/CMakeLists.txt | 1 + libc/src/sys/ioctl/CMakeLists.txt | 12 +++++++ libc/src/sys/ioctl/ioctl.h | 17 +++++++++ libc/src/sys/ioctl/linux/CMakeLists.txt | 13 +++++++ libc/src/sys/ioctl/linux/ioctl.cpp | 38 ++++++++++++++++++++ libc/test/src/sys/ioctl/CMakeLists.txt | 3 ++ libc/test/src/sys/ioctl/linux/CMakeLists.txt | 14 ++++++++ libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 27 ++++++++++++++ 12 files changed, 152 insertions(+) create mode 100644 libc/src/sys/ioctl/CMakeLists.txt create mode 100644 libc/src/sys/ioctl/ioctl.h create mode 100644 libc/src/sys/ioctl/linux/CMakeLists.txt create mode 100644 libc/src/sys/ioctl/linux/ioctl.cpp create mode 100644 libc/test/src/sys/ioctl/CMakeLists.txt create mode 100644 libc/test/src/sys/ioctl/linux/CMakeLists.txt create mode 100644 libc/test/src/sys/ioctl/linux/ioctl_test.cpp diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt index 78da7f0b334b1..b5f8454081c89 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -204,6 +204,9 @@ set(TARGET_LIBC_ENTRYPOINTS #libc.src.stdio.scanf #libc.src.stdio.fscanf + # sys/ioctl.h entrypoints + libc.src.sys.ioctl.ioctl + # sys/mman.h entrypoints libc.src.sys.mman.madvise libc.src.sys.mman.mmap diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt index 5aae4e246cfb3..da9f0a9fb5b50 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -209,6 +209,9 @@ set(TARGET_LIBC_ENTRYPOINTS libc.src.stdio.scanf libc.src.stdio.fscanf + # sys/ioctl.h entrypoints + libc.src.sys.ioctl.ioctl + # sys/mman.h entrypoints libc.src.sys.mman.madvise libc.src.sys.mman.mmap diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt index 5b428e51aee62..923946a75a24f 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -221,6 +221,9 @@ set(TARGET_LIBC_ENTRYPOINTS # https://github.com/llvm/llvm-project/issues/80060 # libc.src.sys.epoll.epoll_pwait2 + # sys/ioctl.h entrypoints + libc.src.sys.ioctl.ioctl + # sys/mman.h entrypoints libc.src.sys.mman.madvise libc.src.sys.mman.mmap diff --git a/libc/spec/linux.td b/libc/spec/linux.td index f91f55ddac784..6e9b64f5a6b4a 100644 --- a/libc/spec/linux.td +++ b/libc/spec/linux.td @@ -79,6 +79,24 @@ def Linux : StandardSpec<"Linux"> { [] // Functions >; + HeaderSpec SysIoctl = HeaderSpec< + "sys/ioctl.h", + [Macro<"MAP_ANONYMOUS">], + [], // Types + [], // Enumerations + [ + FunctionSpec< + "ioctl", + RetValSpec, + [ + ArgSpec, + ArgSpec, + ArgSpec, + ] + >, + ] // Functions + >; + HeaderSpec SysMMan = HeaderSpec< "sys/mman.h", [Macro<"MAP_ANONYMOUS">], diff --git a/libc/src/sys/CMakeLists.txt b/libc/src/sys/CMakeLists.txt index adc666b94202f..ac54df35284a7 100644 --- a/libc/src/sys/CMakeLists.txt +++ b/libc/src/sys/CMakeLists.txt @@ -1,5 +1,6 @@ add_subdirectory(auxv) add_subdirectory(epoll) +add_subdirectory(ioctl) add_subdirectory(mman) add_subdirectory(random) add_subdirectory(resource) diff --git a/libc/src/sys/ioctl/CMakeLists.txt b/libc/src/sys/ioctl/CMakeLists.txt new file mode 100644 index 0000000000000..4b50c278c7871 --- /dev/null +++ b/libc/src/sys/ioctl/CMakeLists.txt @@ -0,0 +1,12 @@ +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) +endif() + +add_entrypoint_object( + ioctl + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.ioctl +) + + diff --git a/libc/src/sys/ioctl/ioctl.h b/libc/src/sys/ioctl/ioctl.h new file mode 100644 index 0000000000000..8365678276a42 --- /dev/null +++ b/libc/src/sys/ioctl/ioctl.h @@ -0,0 +1,17 @@ +//===-- Implementation header for mmap function -----------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_SRC_SYS_IOCTL_IOCTL_H +#define LLVM_LIBC_SRC_SYS_IOCTL_IOCTL_H +namespace LIBC_NAMESPACE { + +int ioctl(int fd, unsigned long request, ...); + +} // namespace LIBC_NAMESPACE + +#endif // LLVM_LIBC_SRC_SYS_IOCTL_IOCTL_H diff --git a/libc/src/sys/ioctl/linux/CMakeLists.txt b/libc/src/sys/ioctl/linux/CMakeLists.txt new file mode 100644 index 0000000000000..8a23505d4e9d1 --- /dev/null +++ b/libc/src/sys/ioctl/linux/CMakeLists.txt @@ -0,0 +1,13 @@ +add_entrypoint_object( + ioctl + SRCS + ioctl.cpp + HDRS + ../ioctl.h + DEPENDS + libc.include.sys_ioctl + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) + diff --git a/libc/src/sys/ioctl/linux/ioctl.cpp b/libc/src/sys/ioctl/linux/ioctl.cpp new file mode 100644 index 0000000000000..6c8ff54dc2aee --- /dev/null +++ b/libc/src/sys/ioctl/linux/ioctl.cpp @@ -0,0 +1,38 @@ +//===---------- Linux implementation of the POSIX ioctl function --------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/sys/ioctl/ioctl.h" + +#include "src/__support/OSUtil/syscall.h" // For internal syscall function. +#include "src/__support/common.h" +#include "src/errno/libc_errno.h" +#include +#include // For syscall numbers. + +namespace LIBC_NAMESPACE { + +// This function is currently linux only. It has to be refactored suitably if +// madvise is to be supported on non-linux operating systems also. +LLVM_LIBC_FUNCTION(int, ioctl, (int fd, unsigned long request, ...)) { + va_list ptr_to_memory; + va_start(ptr_to_memory, 1); + va_arg(ptr_to_memory, void *) int ret = + LIBC_NAMESPACE::syscall_impl(SYS_ioctl, fd, request, ptr_to_memory); + va_end(ptr_to_memory); + + // A negative return value indicates an error with the magnitude of the + // value being the error code. + if (ret < 0) { + libc_errno = -ret; + return -1; + } + + return 0; +} + +} // namespace LIBC_NAMESPACE diff --git a/libc/test/src/sys/ioctl/CMakeLists.txt b/libc/test/src/sys/ioctl/CMakeLists.txt new file mode 100644 index 0000000000000..b4bbe81c92ff2 --- /dev/null +++ b/libc/test/src/sys/ioctl/CMakeLists.txt @@ -0,0 +1,3 @@ +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) + add_subdirectory(${LIBC_TARGET_OS}) +endif() diff --git a/libc/test/src/sys/ioctl/linux/CMakeLists.txt b/libc/test/src/sys/ioctl/linux/CMakeLists.txt new file mode 100644 index 0000000000000..93e68975c4e1e --- /dev/null +++ b/libc/test/src/sys/ioctl/linux/CMakeLists.txt @@ -0,0 +1,14 @@ +add_custom_target(libc_sys_ioctl_unittests) + +add_libc_unittest( + ioctl_test + SUITE + libc_sys_ioctl_unittests + SRCS + ioctl_test.cpp + DEPENDS + libc.include.sys_ioctl + libc.src.errno.errno + libc.test.errno_setter_matcher +) + diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp new file mode 100644 index 0000000000000..3de3eff3e8d4c --- /dev/null +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -0,0 +1,27 @@ +//===-- Unittests for ioctl -----------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/__support/OSUtil/syscall.h" // For internal syscall function. +#include "src/errno/libc_errno.h" +#include "src/sys/ioctl/ioctl.h" +#include "test/UnitTest/ErrnoSetterMatcher.h" +#include "test/UnitTest/LibcTest.h" +#include "test/UnitTest/Test.h" + +#include +#include + +using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails; +using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds; + +TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { + int fd = 10; + unsigned long request = 10; + int res = LIBC_NAMESPACE::ioctl(fd, 10, NULL); + EXPECT_THAT(res, Fails(EBADF, -1)); +} From e1a93deba7f2913cc6a0f50830eba8096116a28e Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 27 Apr 2024 01:45:48 -0400 Subject: [PATCH 02/23] reland ioctl --- libc/src/sys/ioctl/linux/ioctl.cpp | 5 +++-- libc/test/src/sys/CMakeLists.txt | 8 +++++--- libc/test/src/sys/ioctl/linux/CMakeLists.txt | 3 +-- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/libc/src/sys/ioctl/linux/ioctl.cpp b/libc/src/sys/ioctl/linux/ioctl.cpp index 6c8ff54dc2aee..c743cf7a9dd59 100644 --- a/libc/src/sys/ioctl/linux/ioctl.cpp +++ b/libc/src/sys/ioctl/linux/ioctl.cpp @@ -20,8 +20,9 @@ namespace LIBC_NAMESPACE { // madvise is to be supported on non-linux operating systems also. LLVM_LIBC_FUNCTION(int, ioctl, (int fd, unsigned long request, ...)) { va_list ptr_to_memory; - va_start(ptr_to_memory, 1); - va_arg(ptr_to_memory, void *) int ret = + va_start(ptr_to_memory, request); + va_arg(ptr_to_memory, void *); + int ret = LIBC_NAMESPACE::syscall_impl(SYS_ioctl, fd, request, ptr_to_memory); va_end(ptr_to_memory); diff --git a/libc/test/src/sys/CMakeLists.txt b/libc/test/src/sys/CMakeLists.txt index dc0aa8bf7b75d..b58644e60f578 100644 --- a/libc/test/src/sys/CMakeLists.txt +++ b/libc/test/src/sys/CMakeLists.txt @@ -1,4 +1,8 @@ +add_subdirectory(auxv) +add_subdirectory(epoll) +add_subdirectory(ioctl) add_subdirectory(mman) +add_subdirectory(prctl) add_subdirectory(random) add_subdirectory(resource) add_subdirectory(select) @@ -8,6 +12,4 @@ add_subdirectory(stat) add_subdirectory(statvfs) add_subdirectory(utsname) add_subdirectory(wait) -add_subdirectory(prctl) -add_subdirectory(auxv) -add_subdirectory(epoll) + diff --git a/libc/test/src/sys/ioctl/linux/CMakeLists.txt b/libc/test/src/sys/ioctl/linux/CMakeLists.txt index 93e68975c4e1e..aa1bffec16bd6 100644 --- a/libc/test/src/sys/ioctl/linux/CMakeLists.txt +++ b/libc/test/src/sys/ioctl/linux/CMakeLists.txt @@ -7,8 +7,7 @@ add_libc_unittest( SRCS ioctl_test.cpp DEPENDS - libc.include.sys_ioctl + libc.src.sys.ioctl.ioctl libc.src.errno.errno - libc.test.errno_setter_matcher ) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 3de3eff3e8d4c..4fc76d1b3c184 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -22,6 +22,6 @@ using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds; TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { int fd = 10; unsigned long request = 10; - int res = LIBC_NAMESPACE::ioctl(fd, 10, NULL); + int res = LIBC_NAMESPACE::ioctl(fd, request, NULL); EXPECT_THAT(res, Fails(EBADF, -1)); } From 236873def52f79a721649f336d98c3a62dcb2cca Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 11 May 2024 10:32:14 -0400 Subject: [PATCH 03/23] add success test --- libc/src/sys/ioctl/linux/ioctl.cpp | 2 +- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libc/src/sys/ioctl/linux/ioctl.cpp b/libc/src/sys/ioctl/linux/ioctl.cpp index c743cf7a9dd59..e41df2bbedae4 100644 --- a/libc/src/sys/ioctl/linux/ioctl.cpp +++ b/libc/src/sys/ioctl/linux/ioctl.cpp @@ -17,7 +17,7 @@ namespace LIBC_NAMESPACE { // This function is currently linux only. It has to be refactored suitably if -// madvise is to be supported on non-linux operating systems also. +// ioctl is to be supported on non-linux operating systems also. LLVM_LIBC_FUNCTION(int, ioctl, (int fd, unsigned long request, ...)) { va_list ptr_to_memory; va_start(ptr_to_memory, request); diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 4fc76d1b3c184..ed8ce343ef6ec 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -25,3 +25,9 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { int res = LIBC_NAMESPACE::ioctl(fd, request, NULL); EXPECT_THAT(res, Fails(EBADF, -1)); } + +TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { + int fd = open("/dev/tty1", O_RDWR); + int res = LIBC_NAMESPACE::i(fd, KDSETMODE, KD_GRAPHICS); + EXPECT_THAT(res, Succeeds()); +} From 4f1c74994a9ceb7f46a099727cd38d2bc3b8b0f9 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 11 May 2024 10:58:10 -0400 Subject: [PATCH 04/23] add lib --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index ed8ce343ef6ec..feca3647c8501 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -13,6 +13,8 @@ #include "test/UnitTest/LibcTest.h" #include "test/UnitTest/Test.h" +#include +#include #include #include From 1578645c25ed0c51431d438a4841c7ac5196ac05 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 11 May 2024 21:00:51 -0400 Subject: [PATCH 05/23] syntax fix --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index feca3647c8501..d9ca8e4f1e78c 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -30,6 +30,6 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { int fd = open("/dev/tty1", O_RDWR); - int res = LIBC_NAMESPACE::i(fd, KDSETMODE, KD_GRAPHICS); + int res = LIBC_NAMESPACE::ioctl(fd, KDSETMODE, KD_GRAPHICS); EXPECT_THAT(res, Succeeds()); } From e66e13b9bb2ef8c5a95d28fab17863c30b9b5c87 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 11 May 2024 21:18:24 -0400 Subject: [PATCH 06/23] try a new device --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index d9ca8e4f1e78c..adfb1e4e46795 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -29,7 +29,8 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { } TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { - int fd = open("/dev/tty1", O_RDWR); - int res = LIBC_NAMESPACE::ioctl(fd, KDSETMODE, KD_GRAPHICS); + int fd = open("/dev/null", O_RDWR); + int data; + int res = LIBC_NAMESPACE::ioctl(fd, FIONREAD, &data); EXPECT_THAT(res, Succeeds()); } From de63af0f7485f9bf4957293221262fb5128bbdb7 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 11 May 2024 21:33:43 -0400 Subject: [PATCH 07/23] missing header --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index adfb1e4e46795..7f7ea2eb232ec 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -14,7 +14,7 @@ #include "test/UnitTest/Test.h" #include -#include +#include #include #include From c02aab6610986192f013edc4510d11385104458c Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Tue, 21 May 2024 19:23:25 -0400 Subject: [PATCH 08/23] update test file --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 7f7ea2eb232ec..1fe27cb5838b6 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -31,6 +31,6 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { int fd = open("/dev/null", O_RDWR); int data; - int res = LIBC_NAMESPACE::ioctl(fd, FIONREAD, &data); + int res = LIBC_NAMESPACE::ioctl(fd, FS_IOC_GETFLAGS, &data); EXPECT_THAT(res, Succeeds()); } From 8cccec902dc9772d887b1cea784ef4c280a17263 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Tue, 21 May 2024 20:26:29 -0400 Subject: [PATCH 09/23] header update --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 1fe27cb5838b6..70e0721b2aa25 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -13,7 +13,7 @@ #include "test/UnitTest/LibcTest.h" #include "test/UnitTest/Test.h" -#include +#include #include #include #include From 5100e86ca16c364b92ab74eef0bf77c8d3c3f4d6 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Tue, 21 May 2024 20:38:29 -0400 Subject: [PATCH 10/23] missing header --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 70e0721b2aa25..203008678b46b 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -13,7 +13,8 @@ #include "test/UnitTest/LibcTest.h" #include "test/UnitTest/Test.h" -#include +#include +#include #include #include #include From 84147f855d94b946295332066078fa543b874325 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Thu, 23 May 2024 00:04:35 -0400 Subject: [PATCH 11/23] chang file --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 203008678b46b..6e88008954452 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -30,7 +30,7 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { } TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { - int fd = open("/dev/null", O_RDWR); + int fd = open("./testdata/test_data.txt", O_RDWR); int data; int res = LIBC_NAMESPACE::ioctl(fd, FS_IOC_GETFLAGS, &data); EXPECT_THAT(res, Succeeds()); From 49f745a6ac1b3cc9d4099edb121654acecb8442b Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 2 Jun 2024 15:22:23 -0400 Subject: [PATCH 12/23] close the file --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 6e88008954452..6885a94b972f9 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -34,4 +34,5 @@ TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { int data; int res = LIBC_NAMESPACE::ioctl(fd, FS_IOC_GETFLAGS, &data); EXPECT_THAT(res, Succeeds()); + ASSERT_EQ(0, close(fd)); } From 805266fbde8d8b502a2bbe73ade2732e04914cb1 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 2 Jun 2024 15:34:17 -0400 Subject: [PATCH 13/23] some fix --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 6885a94b972f9..65317a74bfd2c 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -30,9 +30,11 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { } TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { - int fd = open("./testdata/test_data.txt", O_RDWR); + constexpr const char *TEST_FILE = "testdata/ioctl.test"; + int fd = LIBC_NAMESPACE::open(TEST_FILE, O_CREAT | O_WRONLY, S_IRWXU); + ASSERT_FALSE(fd == -1); int data; int res = LIBC_NAMESPACE::ioctl(fd, FS_IOC_GETFLAGS, &data); EXPECT_THAT(res, Succeeds()); - ASSERT_EQ(0, close(fd)); + ASSERT_EQ(0, LIBC_NAMESPACE::close(fd)); } From 40b9b292c55f65418b6731d0b011df9f02884363 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 2 Jun 2024 15:36:39 -0400 Subject: [PATCH 14/23] fix --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 65317a74bfd2c..6a3e15fb30ce9 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -31,10 +31,10 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { constexpr const char *TEST_FILE = "testdata/ioctl.test"; - int fd = LIBC_NAMESPACE::open(TEST_FILE, O_CREAT | O_WRONLY, S_IRWXU); + int fd = open(TEST_FILE, O_CREAT | O_WRONLY, S_IRWXU); ASSERT_FALSE(fd == -1); int data; int res = LIBC_NAMESPACE::ioctl(fd, FS_IOC_GETFLAGS, &data); EXPECT_THAT(res, Succeeds()); - ASSERT_EQ(0, LIBC_NAMESPACE::close(fd)); + ASSERT_EQ(0, close(fd)); } From d6ce1100cc397ba37537c10e32cb9eb15b3765be Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 2 Jun 2024 15:43:45 -0400 Subject: [PATCH 15/23] more fix --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 6a3e15fb30ce9..14747b50d1dd2 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -32,7 +32,6 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { constexpr const char *TEST_FILE = "testdata/ioctl.test"; int fd = open(TEST_FILE, O_CREAT | O_WRONLY, S_IRWXU); - ASSERT_FALSE(fd == -1); int data; int res = LIBC_NAMESPACE::ioctl(fd, FS_IOC_GETFLAGS, &data); EXPECT_THAT(res, Succeeds()); From 7d8d9d7e8734046aba4c504404ab6379a2dc9ce3 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 2 Jun 2024 15:46:57 -0400 Subject: [PATCH 16/23] close file --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 14747b50d1dd2..3eb28364a6d20 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -35,5 +35,5 @@ TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { int data; int res = LIBC_NAMESPACE::ioctl(fd, FS_IOC_GETFLAGS, &data); EXPECT_THAT(res, Succeeds()); - ASSERT_EQ(0, close(fd)); + ASSERT_THAT(close(fd), Succeeds(0)); } From 4e07b1c0da63817114b2f806a093b94abd3ff3c7 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 2 Jun 2024 15:51:53 -0400 Subject: [PATCH 17/23] use internal function --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 3eb28364a6d20..cf0f4da8c3c83 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -8,7 +8,9 @@ #include "src/__support/OSUtil/syscall.h" // For internal syscall function. #include "src/errno/libc_errno.h" +#include "src/fcntl/open.h" #include "src/sys/ioctl/ioctl.h" +#include "src/unistd/close.h" #include "test/UnitTest/ErrnoSetterMatcher.h" #include "test/UnitTest/LibcTest.h" #include "test/UnitTest/Test.h" @@ -31,9 +33,12 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { constexpr const char *TEST_FILE = "testdata/ioctl.test"; - int fd = open(TEST_FILE, O_CREAT | O_WRONLY, S_IRWXU); + LIBC_NAMESPACE::libc_errno = 0; + int fd = LIBC_NAMESPACE::open(TEST_FILE, O_CREAT | O_WRONLY, S_IRWXU); + ASSERT_ERRNO_SUCCESS(); + ASSERT_GT(fd, 0); int data; int res = LIBC_NAMESPACE::ioctl(fd, FS_IOC_GETFLAGS, &data); EXPECT_THAT(res, Succeeds()); - ASSERT_THAT(close(fd), Succeeds(0)); + ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0)); } From b784f43b0de6aedf242391899ca02279b16bbbae Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Thu, 13 Jun 2024 23:03:51 -0400 Subject: [PATCH 18/23] add to lib --- libc/test/src/sys/ioctl/linux/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libc/test/src/sys/ioctl/linux/CMakeLists.txt b/libc/test/src/sys/ioctl/linux/CMakeLists.txt index aa1bffec16bd6..3f82d1765433f 100644 --- a/libc/test/src/sys/ioctl/linux/CMakeLists.txt +++ b/libc/test/src/sys/ioctl/linux/CMakeLists.txt @@ -9,5 +9,7 @@ add_libc_unittest( DEPENDS libc.src.sys.ioctl.ioctl libc.src.errno.errno + libc.src.fcntl.open + libc.src.unistd.close ) From fd3bad5d08c96a744eb649a84e128fc1be07fce0 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 23 Jun 2024 14:32:31 -0400 Subject: [PATCH 19/23] fix test --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index cf0f4da8c3c83..eeec386b8e524 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -33,7 +33,6 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { constexpr const char *TEST_FILE = "testdata/ioctl.test"; - LIBC_NAMESPACE::libc_errno = 0; int fd = LIBC_NAMESPACE::open(TEST_FILE, O_CREAT | O_WRONLY, S_IRWXU); ASSERT_ERRNO_SUCCESS(); ASSERT_GT(fd, 0); From 0b8f0db70c0ce89a6c8b2a971c0f48067973c3ee Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 23 Jun 2024 14:39:55 -0400 Subject: [PATCH 20/23] fix test --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index eeec386b8e524..e6b010e91fda6 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -32,7 +32,8 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { } TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { - constexpr const char *TEST_FILE = "testdata/ioctl.test"; + constexpr const char *FILENAME = "testdata/ioctl.test"; + auto TEST_FILE = libc_make_test_file_path(FILENAME); int fd = LIBC_NAMESPACE::open(TEST_FILE, O_CREAT | O_WRONLY, S_IRWXU); ASSERT_ERRNO_SUCCESS(); ASSERT_GT(fd, 0); From e5e65f82f61698ed38870295a6fed609fe74ea36 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 23 Jun 2024 14:58:33 -0400 Subject: [PATCH 21/23] fix text --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index e6b010e91fda6..9e65e9b84fcd0 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -21,10 +21,8 @@ #include #include -using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails; -using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds; - TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { + using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails; int fd = 10; unsigned long request = 10; int res = LIBC_NAMESPACE::ioctl(fd, request, NULL); @@ -32,9 +30,11 @@ TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { } TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { - constexpr const char *FILENAME = "testdata/ioctl.test"; + using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds; + LIBC_NAMESPACE::libc_errno = 0; + constexpr const char *FILENAME = "ioctl.test"; auto TEST_FILE = libc_make_test_file_path(FILENAME); - int fd = LIBC_NAMESPACE::open(TEST_FILE, O_CREAT | O_WRONLY, S_IRWXU); + int fd = LIBC_NAMESPACE::open(TEST_FILE, O_WRONLY | O_CREAT, S_IRWXU); ASSERT_ERRNO_SUCCESS(); ASSERT_GT(fd, 0); int data; From 7b55dee664e7521bb5540529b9cf3b3740fcbe7b Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 23 Jun 2024 15:07:07 -0400 Subject: [PATCH 22/23] remove headers --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 9e65e9b84fcd0..93aecbfa10ec4 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -16,10 +16,6 @@ #include "test/UnitTest/Test.h" #include -#include -#include -#include -#include TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails; From 82e9533ea5f75ef2284fd3cf5230f1897090991c Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 23 Jun 2024 15:16:57 -0400 Subject: [PATCH 23/23] fix header --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp index 93aecbfa10ec4..68326879b895b 100644 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -15,7 +15,7 @@ #include "test/UnitTest/LibcTest.h" #include "test/UnitTest/Test.h" -#include +#include TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;