[libc-commits] [libc] [libc] Implement renameat in stdio (PR #225739)
Aman Maurya via libc-commits
libc-commits at lists.llvm.org
Wed Sep 23 21:47:23 PDT 2026
https://github.com/amanmaurya92 updated https://github.com/llvm/llvm-project/pull/225739
>From 56089d78d232a10eb7b3e56beec9f5a9b5251a19 Mon Sep 17 00:00:00 2001
From: amanmaurya92 <amanmaurya9209 at gmail.com>
Date: Wed, 23 Sep 2026 17:22:18 +0530
Subject: [PATCH 1/2] [libc] Implement renameat in stdio
---
libc/config/linux/aarch64/entrypoints.txt | 1 +
libc/config/linux/riscv/entrypoints.txt | 1 +
libc/config/linux/x86_64/entrypoints.txt | 1 +
libc/include/stdio.yaml | 9 ++
.../OSUtil/linux/syscall_wrappers/rename.h | 16 ++++
libc/src/stdio/CMakeLists.txt | 7 ++
libc/src/stdio/linux/CMakeLists.txt | 11 +++
libc/src/stdio/linux/renameat.cpp | 28 ++++++
libc/src/stdio/renameat.h | 21 +++++
libc/test/src/stdio/CMakeLists.txt | 23 +++++
libc/test/src/stdio/renameat_test.cpp | 94 +++++++++++++++++++
11 files changed, 212 insertions(+)
create mode 100644 libc/src/stdio/linux/renameat.cpp
create mode 100644 libc/src/stdio/renameat.h
create mode 100644 libc/test/src/stdio/renameat_test.cpp
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 479a70846714f0..6429fa8c451e0b 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -266,6 +266,7 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.stdio.printf
libc.src.stdio.remove
libc.src.stdio.rename
+ libc.src.stdio.renameat
libc.src.stdio.scanf
libc.src.stdio.vscanf
libc.src.stdio.snprintf
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index c841b28d9e544e..c5987828efb67d 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -289,6 +289,7 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.stdio.printf
libc.src.stdio.remove
libc.src.stdio.rename
+ libc.src.stdio.renameat
libc.src.stdio.scanf
libc.src.stdio.vscanf
libc.src.stdio.snprintf
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 786a1ea0743055..4e8f0790789502 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -289,6 +289,7 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.stdio.printf
libc.src.stdio.remove
libc.src.stdio.rename
+ libc.src.stdio.renameat
libc.src.stdio.scanf
libc.src.stdio.vscanf
libc.src.stdio.snprintf
diff --git a/libc/include/stdio.yaml b/libc/include/stdio.yaml
index bb28dadd29b3ba..c01197955ef6e2 100644
--- a/libc/include/stdio.yaml
+++ b/libc/include/stdio.yaml
@@ -353,6 +353,15 @@ functions:
arguments:
- type: const char *
- type: const char *
+ - name: renameat
+ standards:
+ - posix
+ return_type: int
+ arguments:
+ - type: int
+ - type: const char *
+ - type: int
+ - type: const char *
- name: scanf
standards:
- stdc
diff --git a/libc/src/__support/OSUtil/linux/syscall_wrappers/rename.h b/libc/src/__support/OSUtil/linux/syscall_wrappers/rename.h
index ec0be35b27ab8d..90a58cf9b331ef 100644
--- a/libc/src/__support/OSUtil/linux/syscall_wrappers/rename.h
+++ b/libc/src/__support/OSUtil/linux/syscall_wrappers/rename.h
@@ -24,6 +24,22 @@
namespace LIBC_NAMESPACE_DECL {
namespace linux_syscalls {
+LIBC_INLINE ErrorOr<int> renameat(int olddirfd, const char *oldpath,
+ int newdirfd, const char *newpath) {
+#ifdef SYS_renameat2
+ int ret =
+ syscall_impl<int>(SYS_renameat2, olddirfd, oldpath, newdirfd, newpath, 0);
+#elif defined(SYS_renameat)
+ int ret =
+ syscall_impl<int>(SYS_renameat, olddirfd, oldpath, newdirfd, newpath);
+#else
+#error "renameat and renameat2 syscalls not available."
+#endif
+ if (ret < 0)
+ return Error(-ret);
+ return ret;
+}
+
LIBC_INLINE ErrorOr<int> rename(const char *oldpath, const char *newpath) {
#ifdef SYS_renameat2
int ret =
diff --git a/libc/src/stdio/CMakeLists.txt b/libc/src/stdio/CMakeLists.txt
index a0d4e86674b956..d475ad5d7708cf 100644
--- a/libc/src/stdio/CMakeLists.txt
+++ b/libc/src/stdio/CMakeLists.txt
@@ -271,6 +271,13 @@ add_entrypoint_object(
.${LIBC_TARGET_OS}.rename
)
+add_entrypoint_object(
+ renameat
+ ALIAS
+ DEPENDS
+ .${LIBC_TARGET_OS}.renameat
+)
+
add_entrypoint_object(
fdopen
ALIAS
diff --git a/libc/src/stdio/linux/CMakeLists.txt b/libc/src/stdio/linux/CMakeLists.txt
index 6631f2ca4814a1..db715c2b2bd333 100644
--- a/libc/src/stdio/linux/CMakeLists.txt
+++ b/libc/src/stdio/linux/CMakeLists.txt
@@ -23,6 +23,17 @@ add_entrypoint_object(
libc.src.errno.errno
)
+add_entrypoint_object(
+ renameat
+ SRCS
+ renameat.cpp
+ HDRS
+ ../renameat.h
+ DEPENDS
+ libc.src.__support.OSUtil.linux.syscall_wrappers.rename
+ libc.src.errno.errno
+)
+
add_entrypoint_object(
fdopen
SRCS
diff --git a/libc/src/stdio/linux/renameat.cpp b/libc/src/stdio/linux/renameat.cpp
new file mode 100644
index 00000000000000..e270d01fc776c6
--- /dev/null
+++ b/libc/src/stdio/linux/renameat.cpp
@@ -0,0 +1,28 @@
+//===-- Linux implementation of renameat ----------------------------------===//
+//
+// 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/stdio/renameat.h"
+#include "src/__support/OSUtil/linux/syscall_wrappers/rename.h"
+#include "src/__support/common.h"
+#include "src/__support/libc_errno.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(int, renameat,
+ (int olddirfd, const char *oldpath, int newdirfd,
+ const char *newpath)) {
+ auto result = linux_syscalls::renameat(olddirfd, oldpath, newdirfd, newpath);
+ if (!result) {
+ libc_errno = result.error();
+ return -1;
+ }
+ return 0;
+}
+
+} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/stdio/renameat.h b/libc/src/stdio/renameat.h
new file mode 100644
index 00000000000000..154f3e6fe4b138
--- /dev/null
+++ b/libc/src/stdio/renameat.h
@@ -0,0 +1,21 @@
+//===-- Implementation header of renameat -----------------------*- 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_STDIO_RENAMEAT_H
+#define LLVM_LIBC_SRC_STDIO_RENAMEAT_H
+
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+int renameat(int olddirfd, const char *oldpath, int newdirfd,
+ const char *newpath);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_STDIO_RENAMEAT_H
diff --git a/libc/test/src/stdio/CMakeLists.txt b/libc/test/src/stdio/CMakeLists.txt
index e0ca1ab2ca162c..28b07cd984e9ea 100644
--- a/libc/test/src/stdio/CMakeLists.txt
+++ b/libc/test/src/stdio/CMakeLists.txt
@@ -546,6 +546,29 @@ if(${LIBC_TARGET_OS} STREQUAL "linux")
libc.test.UnitTest.ErrnoSetterMatcher
)
+ add_libc_test(
+ renameat_test
+ SUITE
+ libc_stdio_unittests
+ SRCS
+ renameat_test.cpp
+ DEPENDS
+ libc.hdr.errno_macros
+ libc.hdr.fcntl_macros
+ libc.hdr.sys_stat_macros
+ libc.hdr.unistd_macros
+ libc.src.__support.CPP.scope
+ libc.src.errno.errno
+ libc.src.fcntl.open
+ libc.src.stdio.renameat
+ libc.src.unistd.access
+ libc.src.unistd.close
+ libc.src.unistd.unlink
+ libc.test.UnitTest.ErrnoCheckingTest
+ libc.test.UnitTest.ErrnoSetterMatcher
+ )
+
+
add_libc_test(
fdopen_test
SUITE
diff --git a/libc/test/src/stdio/renameat_test.cpp b/libc/test/src/stdio/renameat_test.cpp
new file mode 100644
index 00000000000000..be3fd118aec3f0
--- /dev/null
+++ b/libc/test/src/stdio/renameat_test.cpp
@@ -0,0 +1,94 @@
+//===-- Unittests for renameat --------------------------------------------===//
+//
+// 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 "hdr/errno_macros.h"
+#include "hdr/fcntl_macros.h"
+#include "hdr/sys_stat_macros.h"
+#include "hdr/unistd_macros.h"
+#include "src/__support/CPP/scope.h"
+#include "src/__support/libc_errno.h"
+#include "src/fcntl/open.h"
+#include "src/stdio/renameat.h"
+#include "src/unistd/access.h"
+#include "src/unistd/close.h"
+#include "src/unistd/unlink.h"
+#include "test/UnitTest/ErrnoCheckingTest.h"
+#include "test/UnitTest/ErrnoSetterMatcher.h"
+#include "test/UnitTest/Test.h"
+
+using namespace LIBC_NAMESPACE::testing::ErrnoSetterMatcher;
+using LlvmLibcRenameatTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
+
+TEST_F(LlvmLibcRenameatTest, CreateAndRenameFileWithAtFdcwd) {
+ constexpr const char *FILENAME0 = "renameat.test.file0";
+ auto TEST_FILEPATH0 = libc_make_test_file_path(FILENAME0);
+ constexpr const char *FILENAME1 = "renameat.test.file1";
+ auto TEST_FILEPATH1 = libc_make_test_file_path(FILENAME1);
+
+ int fd = LIBC_NAMESPACE::open(TEST_FILEPATH0, O_WRONLY | O_CREAT, S_IRWXU);
+ ASSERT_ERRNO_SUCCESS();
+ ASSERT_GT(fd, 0);
+ ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
+
+ LIBC_NAMESPACE::cpp::scope_exit cleanup_files([&] {
+ LIBC_NAMESPACE::unlink(TEST_FILEPATH0);
+ LIBC_NAMESPACE::unlink(TEST_FILEPATH1);
+ LIBC_NAMESPACE::libc_errno = 0;
+ });
+
+ ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILEPATH0, F_OK), Succeeds(0));
+ ASSERT_THAT(LIBC_NAMESPACE::renameat(AT_FDCWD, TEST_FILEPATH0, AT_FDCWD,
+ TEST_FILEPATH1),
+ Succeeds(0));
+ ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILEPATH1, F_OK), Succeeds(0));
+ ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILEPATH0, F_OK), Fails(ENOENT));
+}
+
+TEST_F(LlvmLibcRenameatTest, CreateAndRenameWithDirFd) {
+ auto TEST_DIR = libc_make_test_file_path("testdata");
+ constexpr const char *BASENAME0 = "renameat_dir0.test";
+ constexpr const char *BASENAME1 = "renameat_dir1.test";
+ auto PATH0 = libc_make_test_file_path("testdata/renameat_dir0.test");
+ auto PATH1 = libc_make_test_file_path("testdata/renameat_dir1.test");
+
+ int dirfd = LIBC_NAMESPACE::open(TEST_DIR, O_DIRECTORY);
+ ASSERT_GT(dirfd, 0);
+ LIBC_NAMESPACE::cpp::scope_exit cleanup_dir(
+ [&] { EXPECT_THAT(LIBC_NAMESPACE::close(dirfd), Succeeds(0)); });
+
+ int fd = LIBC_NAMESPACE::open(PATH0, O_WRONLY | O_CREAT, S_IRWXU);
+ ASSERT_GT(fd, 0);
+ ASSERT_ERRNO_SUCCESS();
+ ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
+
+ LIBC_NAMESPACE::cpp::scope_exit cleanup_files([&] {
+ LIBC_NAMESPACE::unlink(PATH0);
+ LIBC_NAMESPACE::unlink(PATH1);
+ LIBC_NAMESPACE::libc_errno = 0;
+ });
+
+ ASSERT_THAT(LIBC_NAMESPACE::access(PATH0, F_OK), Succeeds(0));
+ ASSERT_THAT(LIBC_NAMESPACE::renameat(dirfd, BASENAME0, dirfd, BASENAME1),
+ Succeeds(0));
+ ASSERT_THAT(LIBC_NAMESPACE::access(PATH1, F_OK), Succeeds(0));
+ ASSERT_THAT(LIBC_NAMESPACE::access(PATH0, F_OK), Fails(ENOENT));
+}
+
+TEST_F(LlvmLibcRenameatTest, BadDirFd) {
+ ASSERT_THAT(LIBC_NAMESPACE::renameat(-1, "some-file", -1, "other-file"),
+ Fails(EBADF));
+}
+
+TEST_F(LlvmLibcRenameatTest, RenameNonExistent) {
+ constexpr const char *FILENAME1 = "renameat.test.nonexistent";
+ auto TEST_FILEPATH1 = libc_make_test_file_path(FILENAME1);
+
+ ASSERT_THAT(LIBC_NAMESPACE::renameat(AT_FDCWD, "non-existent-source",
+ AT_FDCWD, TEST_FILEPATH1),
+ Fails(ENOENT));
+}
>From 342338a0308fb6f3a524947f868d2032db46cf47 Mon Sep 17 00:00:00 2001
From: amanmaurya92 <amanmaurya9209 at gmail.com>
Date: Thu, 24 Sep 2026 10:16:41 +0530
Subject: [PATCH 2/2] [libc] Address review: separate renameat syscall wrapper
and update headers
- Move renameat syscall wrapper to its own renameat.h header.
- Add missing dependencies (macros.config, common, libc_errno) to renameat CMake entrypoint.
- Update file headers to LLVM standard \file style.
Assisted by Gemini.
---
.../linux/syscall_wrappers/CMakeLists.txt | 12 ++++++
.../OSUtil/linux/syscall_wrappers/rename.h | 16 -------
.../OSUtil/linux/syscall_wrappers/renameat.h | 42 +++++++++++++++++++
libc/src/stdio/linux/CMakeLists.txt | 5 ++-
libc/src/stdio/linux/renameat.cpp | 9 +++-
libc/src/stdio/renameat.h | 7 +++-
libc/test/src/stdio/renameat_test.cpp | 7 +++-
7 files changed, 77 insertions(+), 21 deletions(-)
create mode 100644 libc/src/__support/OSUtil/linux/syscall_wrappers/renameat.h
diff --git a/libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt b/libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt
index d1fbfa37715a9f..7adccc81e10451 100644
--- a/libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt
+++ b/libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt
@@ -1056,6 +1056,18 @@ add_header_library(
libc.include.sys_syscall
)
+add_header_library(
+ renameat
+ HDRS
+ renameat.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(
lseek
HDRS
diff --git a/libc/src/__support/OSUtil/linux/syscall_wrappers/rename.h b/libc/src/__support/OSUtil/linux/syscall_wrappers/rename.h
index 90a58cf9b331ef..ec0be35b27ab8d 100644
--- a/libc/src/__support/OSUtil/linux/syscall_wrappers/rename.h
+++ b/libc/src/__support/OSUtil/linux/syscall_wrappers/rename.h
@@ -24,22 +24,6 @@
namespace LIBC_NAMESPACE_DECL {
namespace linux_syscalls {
-LIBC_INLINE ErrorOr<int> renameat(int olddirfd, const char *oldpath,
- int newdirfd, const char *newpath) {
-#ifdef SYS_renameat2
- int ret =
- syscall_impl<int>(SYS_renameat2, olddirfd, oldpath, newdirfd, newpath, 0);
-#elif defined(SYS_renameat)
- int ret =
- syscall_impl<int>(SYS_renameat, olddirfd, oldpath, newdirfd, newpath);
-#else
-#error "renameat and renameat2 syscalls not available."
-#endif
- if (ret < 0)
- return Error(-ret);
- return ret;
-}
-
LIBC_INLINE ErrorOr<int> rename(const char *oldpath, const char *newpath) {
#ifdef SYS_renameat2
int ret =
diff --git a/libc/src/__support/OSUtil/linux/syscall_wrappers/renameat.h b/libc/src/__support/OSUtil/linux/syscall_wrappers/renameat.h
new file mode 100644
index 00000000000000..519f94723ad692
--- /dev/null
+++ b/libc/src/__support/OSUtil/linux/syscall_wrappers/renameat.h
@@ -0,0 +1,42 @@
+//===----------------------------------------------------------------------===//
+//
+// 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 renameat.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_OSUTIL_SYSCALL_WRAPPERS_RENAMEAT_H
+#define LLVM_LIBC_SRC___SUPPORT_OSUTIL_SYSCALL_WRAPPERS_RENAMEAT_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> renameat(int olddirfd, const char *oldpath,
+ int newdirfd, const char *newpath) {
+#if defined(SYS_renameat2)
+ return syscall_checked<int>(SYS_renameat2, olddirfd, oldpath, newdirfd,
+ newpath, 0);
+#elif defined(SYS_renameat)
+ return syscall_checked<int>(SYS_renameat, olddirfd, oldpath, newdirfd,
+ newpath);
+#else
+#error "renameat and renameat2 syscalls not available."
+#endif
+}
+
+} // namespace linux_syscalls
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_SYSCALL_WRAPPERS_RENAMEAT_H
diff --git a/libc/src/stdio/linux/CMakeLists.txt b/libc/src/stdio/linux/CMakeLists.txt
index db715c2b2bd333..d4b79e978e063d 100644
--- a/libc/src/stdio/linux/CMakeLists.txt
+++ b/libc/src/stdio/linux/CMakeLists.txt
@@ -30,7 +30,10 @@ add_entrypoint_object(
HDRS
../renameat.h
DEPENDS
- libc.src.__support.OSUtil.linux.syscall_wrappers.rename
+ libc.src.__support.OSUtil.linux.syscall_wrappers.renameat
+ libc.src.__support.common
+ libc.src.__support.libc_errno
+ libc.src.__support.macros.config
libc.src.errno.errno
)
diff --git a/libc/src/stdio/linux/renameat.cpp b/libc/src/stdio/linux/renameat.cpp
index e270d01fc776c6..b628c8ec42787b 100644
--- a/libc/src/stdio/linux/renameat.cpp
+++ b/libc/src/stdio/linux/renameat.cpp
@@ -1,13 +1,18 @@
-//===-- Linux implementation of renameat ----------------------------------===//
+//===----------------------------------------------------------------------===//
//
// 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
+/// Linux implementation of renameat.
+///
+//===----------------------------------------------------------------------===//
#include "src/stdio/renameat.h"
-#include "src/__support/OSUtil/linux/syscall_wrappers/rename.h"
+#include "src/__support/OSUtil/linux/syscall_wrappers/renameat.h"
#include "src/__support/common.h"
#include "src/__support/libc_errno.h"
#include "src/__support/macros/config.h"
diff --git a/libc/src/stdio/renameat.h b/libc/src/stdio/renameat.h
index 154f3e6fe4b138..39692f6272c63d 100644
--- a/libc/src/stdio/renameat.h
+++ b/libc/src/stdio/renameat.h
@@ -1,10 +1,15 @@
-//===-- Implementation header of renameat -----------------------*- 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
//
//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Implementation header of renameat.
+///
+//===----------------------------------------------------------------------===//
#ifndef LLVM_LIBC_SRC_STDIO_RENAMEAT_H
#define LLVM_LIBC_SRC_STDIO_RENAMEAT_H
diff --git a/libc/test/src/stdio/renameat_test.cpp b/libc/test/src/stdio/renameat_test.cpp
index be3fd118aec3f0..57949f9d17d018 100644
--- a/libc/test/src/stdio/renameat_test.cpp
+++ b/libc/test/src/stdio/renameat_test.cpp
@@ -1,10 +1,15 @@
-//===-- Unittests for renameat --------------------------------------------===//
+//===----------------------------------------------------------------------===//
//
// 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
+/// Unittests for renameat.
+///
+//===----------------------------------------------------------------------===//
#include "hdr/errno_macros.h"
#include "hdr/fcntl_macros.h"
More information about the libc-commits
mailing list