liblinux++

A hosted C++ runtime without any libc.
git clone git://henryandlizzy.uk/liblinux++
Log | Files | Refs

commit a44b5e951b4a75677a0b2ade58861380106d4b88
parent 132fd370190cc8d04468976bf15d42b5b7b2c771
Author: Henry Wilson <henry@henryandlizzy.uk>
Date:   Tue, 23 Dec 2025 17:27:39 +0000

Add renameat2 and mv

Diffstat:
Mlinux.hpp | 9+++++++++
Amv.cpp | 8++++++++
Mx86_64.s | 4++++
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