commit a44b5e951b4a75677a0b2ade58861380106d4b88
parent 132fd370190cc8d04468976bf15d42b5b7b2c771
Author: Henry Wilson <henry@henryandlizzy.uk>
Date: Tue, 23 Dec 2025 17:27:39 +0000
Add renameat2 and mv
Diffstat:
3 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/linux.hpp b/linux.hpp
@@ -161,3 +161,12 @@ struct timespec {
};
extern syscall_result<void> nanosleep(const timespec &duration, timespec */*_Nullable*/ rem);
+
+enum class rename_flags : unsigned int
+{
+ NOREPLACE = 0b001,
+ EXCHANGE = 0b010,
+ WHITEOUT = 0b100,
+};
+
+extern syscall_result<void> renameat2(file olddir, c_str oldpath, file newdir, c_str newpath, rename_flags flags);
diff --git a/mv.cpp b/mv.cpp
@@ -0,0 +1,8 @@
+#include "linux.hpp"
+
+int main(int argc, char* argv[])
+{
+ if (argc != 3)
+ return 1;
+ return !renameat2(AT_FDCWD, argv[1], AT_FDCWD, argv[2], rename_flags::NOREPLACE);
+}
diff --git a/x86_64.s b/x86_64.s
@@ -80,3 +80,7 @@ _syscall 217 syscall3
extern openat
extern_alias _Z6openat4file5c_strii
_syscall 257 syscall6
+
+extern renameat
+extern_alias _Z9renameat24file5c_strS_S0_12rename_flags
+_syscall 316 syscall6