[libc] Use a syscall wrapper for epoll_create1
diff --git a/libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt b/libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt index c7c1f4b..6701bb2 100644 --- a/libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt +++ b/libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt
@@ -1267,6 +1267,18 @@ ) add_header_library( + epoll_create1 + HDRS + epoll_create1.h + DEPENDS + libc.src.__support.OSUtil.osutil + libc.src.__support.common + libc.src.__support.error_or + libc.src.__support.macros.config + libc.include.sys_syscall +) + +add_header_library( epoll_ctl HDRS epoll_ctl.h
diff --git a/libc/src/__support/OSUtil/linux/syscall_wrappers/epoll_create1.h b/libc/src/__support/OSUtil/linux/syscall_wrappers/epoll_create1.h new file mode 100644 index 0000000..2997bfd --- /dev/null +++ b/libc/src/__support/OSUtil/linux/syscall_wrappers/epoll_create1.h
@@ -0,0 +1,34 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// Syscall wrapper for epoll_create1. +/// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_SRC___SUPPORT_OSUTIL_SYSCALL_WRAPPERS_EPOLL_CREATE1_H +#define LLVM_LIBC_SRC___SUPPORT_OSUTIL_SYSCALL_WRAPPERS_EPOLL_CREATE1_H + +#include "src/__support/OSUtil/linux/syscall.h" // syscall_checked +#include "src/__support/common.h" +#include "src/__support/error_or.h" +#include "src/__support/macros/config.h" + +#include <sys/syscall.h> // For syscall numbers + +namespace LIBC_NAMESPACE_DECL { +namespace linux_syscalls { + +LIBC_INLINE ErrorOr<int> epoll_create1(int flags) { + return syscall_checked<int>(SYS_epoll_create1, flags); +} + +} // namespace linux_syscalls +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_SYSCALL_WRAPPERS_EPOLL_CREATE1_H
diff --git a/libc/src/sys/epoll/linux/CMakeLists.txt b/libc/src/sys/epoll/linux/CMakeLists.txt index 80affd3..2fab331 100644 --- a/libc/src/sys/epoll/linux/CMakeLists.txt +++ b/libc/src/sys/epoll/linux/CMakeLists.txt
@@ -17,8 +17,10 @@ HDRS ../epoll_create1.h DEPENDS - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil + libc.src.__support.OSUtil.linux.syscall_wrappers.epoll_create1 + libc.src.__support.common + libc.src.__support.libc_errno + libc.src.__support.macros.config libc.src.errno.errno )
diff --git a/libc/src/sys/epoll/linux/epoll_create1.cpp b/libc/src/sys/epoll/linux/epoll_create1.cpp index 3c60090..90a4b35 100644 --- a/libc/src/sys/epoll/linux/epoll_create1.cpp +++ b/libc/src/sys/epoll/linux/epoll_create1.cpp
@@ -8,25 +8,20 @@ #include "src/sys/epoll/epoll_create1.h" -#include "src/__support/OSUtil/syscall.h" // For internal syscall function. +#include "src/__support/OSUtil/linux/syscall_wrappers/epoll_create1.h" #include "src/__support/common.h" #include "src/__support/libc_errno.h" #include "src/__support/macros/config.h" -#include <sys/syscall.h> // For syscall numbers. namespace LIBC_NAMESPACE_DECL { LLVM_LIBC_FUNCTION(int, epoll_create1, (int flags)) { - int ret = LIBC_NAMESPACE::syscall_impl<int>(SYS_epoll_create1, flags); - - // A negative return value indicates an error with the magnitude of the - // value being the error code. - if (ret < 0) { - libc_errno = -ret; + auto result = linux_syscalls::epoll_create1(flags); + if (!result) { + libc_errno = result.error(); return -1; } - - return ret; + return result.value(); } } // namespace LIBC_NAMESPACE_DECL
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel index e4678d6..193b23e 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -2521,6 +2521,21 @@ ) libc_support_library( + name = "__support_osutil_linux_syscall_wrappers_epoll_create1", + hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/epoll_create1.h"], + target_compatible_with = select({ + "@platforms//os:linux": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + deps = [ + ":__support_common", + ":__support_error_or", + ":__support_macros_config", + ":__support_osutil_syscall", + ], +) + +libc_support_library( name = "__support_osutil_linux_syscall_wrappers_epoll_ctl", hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/epoll_ctl.h"], target_compatible_with = select({ @@ -19340,7 +19355,7 @@ ":__support_common", ":__support_libc_errno", ":__support_macros_config", - ":__support_osutil_syscall", + ":__support_osutil_linux_syscall_wrappers_epoll_create1", ":errno", ], )