[libc-commits] [libc] Reland: [libc] implement ioctl ([libc] implement ioctl #85890) (PR #90317)
Nhat Nguyen via libc-commits
libc-commits at lists.llvm.org
Sun Jun 23 11:40:17 PDT 2024
https://github.com/changkhothuychung updated https://github.com/llvm/llvm-project/pull/90317
>From 05a886d00538f54445d51ae9749e289faace6e60 Mon Sep 17 00:00:00 2001
From: changkhothuychung <nhat7203 at gmail.com>
Date: Sat, 27 Apr 2024 01:33:18 -0400
Subject: [PATCH 01/20] 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<IntType>,
+ [
+ ArgSpec<IntType>,
+ ArgSpec<UnsignedLongType>,
+ ArgSpec<VoidPtr>,
+ ]
+ >,
+ ] // 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 <stdarg.h>
+#include <sys/syscall.h> // 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<int>(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 <sys/syscall.h>
+#include <unistd.h>
+
+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 <nhat7203 at gmail.com>
Date: Sat, 27 Apr 2024 01:45:48 -0400
Subject: [PATCH 02/20] 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<int>(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 <nhat7203 at gmail.com>
Date: Sat, 11 May 2024 10:32:14 -0400
Subject: [PATCH 03/20] 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 <nhat7203 at gmail.com>
Date: Sat, 11 May 2024 10:58:10 -0400
Subject: [PATCH 04/20] 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 <fcntl.h>
+#include <sys/kd.h>
#include <sys/syscall.h>
#include <unistd.h>
>From 1578645c25ed0c51431d438a4841c7ac5196ac05 Mon Sep 17 00:00:00 2001
From: changkhothuychung <nhat7203 at gmail.com>
Date: Sat, 11 May 2024 21:00:51 -0400
Subject: [PATCH 05/20] 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 <nhat7203 at gmail.com>
Date: Sat, 11 May 2024 21:18:24 -0400
Subject: [PATCH 06/20] 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 <nhat7203 at gmail.com>
Date: Sat, 11 May 2024 21:33:43 -0400
Subject: [PATCH 07/20] 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 <fcntl.h>
-#include <sys/kd.h>
+#include <sys/ioctl.h>
#include <sys/syscall.h>
#include <unistd.h>
>From c02aab6610986192f013edc4510d11385104458c Mon Sep 17 00:00:00 2001
From: changkhothuychung <nhat7203 at gmail.com>
Date: Tue, 21 May 2024 19:23:25 -0400
Subject: [PATCH 08/20] 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 <nhat7203 at gmail.com>
Date: Tue, 21 May 2024 20:26:29 -0400
Subject: [PATCH 09/20] 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 <fcntl.h>
+#include <fs.h>
#include <sys/ioctl.h>
#include <sys/syscall.h>
#include <unistd.h>
>From 5100e86ca16c364b92ab74eef0bf77c8d3c3f4d6 Mon Sep 17 00:00:00 2001
From: changkhothuychung <nhat7203 at gmail.com>
Date: Tue, 21 May 2024 20:38:29 -0400
Subject: [PATCH 10/20] 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 <fs.h>
+#include <fcntl.h>
+#include <linux/fs.h>
#include <sys/ioctl.h>
#include <sys/syscall.h>
#include <unistd.h>
>From 84147f855d94b946295332066078fa543b874325 Mon Sep 17 00:00:00 2001
From: changkhothuychung <nhat7203 at gmail.com>
Date: Thu, 23 May 2024 00:04:35 -0400
Subject: [PATCH 11/20] 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 <nhat7203 at gmail.com>
Date: Sun, 2 Jun 2024 15:22:23 -0400
Subject: [PATCH 12/20] 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 <nhat7203 at gmail.com>
Date: Sun, 2 Jun 2024 15:34:17 -0400
Subject: [PATCH 13/20] 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 <nhat7203 at gmail.com>
Date: Sun, 2 Jun 2024 15:36:39 -0400
Subject: [PATCH 14/20] 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 <nhat7203 at gmail.com>
Date: Sun, 2 Jun 2024 15:43:45 -0400
Subject: [PATCH 15/20] 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 <nhat7203 at gmail.com>
Date: Sun, 2 Jun 2024 15:46:57 -0400
Subject: [PATCH 16/20] 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 <nhat7203 at gmail.com>
Date: Sun, 2 Jun 2024 15:51:53 -0400
Subject: [PATCH 17/20] 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 <nhat7203 at gmail.com>
Date: Thu, 13 Jun 2024 23:03:51 -0400
Subject: [PATCH 18/20] 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 <nhat7203 at gmail.com>
Date: Sun, 23 Jun 2024 14:32:31 -0400
Subject: [PATCH 19/20] 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 <nhat7203 at gmail.com>
Date: Sun, 23 Jun 2024 14:39:55 -0400
Subject: [PATCH 20/20] 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);
More information about the libc-commits
mailing list