commit e3c35dc7aa1a22f744d4aaaaea08f2365d9b0d36
parent 09504ff0b7b080108faeda3c94982aaa429b6885
Author: Henry Wilson <henry@henryandlizzy.uk>
Date: Mon, 29 Dec 2025 15:50:19 +0000
Add unlinkat
Diffstat:
4 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/aarch64.s b/aarch64.s
@@ -1,3 +1,5 @@
+# Syscall numbers https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/syscalls/#arm64-64-bit
+
.global start
.text
@@ -28,6 +30,10 @@ extern_alias \name
.text
.global exit
+extern unlinkat
+extern_alias _Z8unlinkat4file5c_str12unlink_flags
+syscall 35
+
extern getdents64
extern_alias _Z10getdents644fileP14linux_dirent64m
syscall 61
diff --git a/linux.hpp b/linux.hpp
@@ -189,3 +189,10 @@ enum class rename_flags : unsigned int
};
extern syscall_result<void> renameat2(file olddir, c_str oldpath, file newdir, c_str newpath, rename_flags flags) noexcept;
+
+enum class unlink_flags : int
+{
+ REMOVEDIR = 0x200,
+};
+
+extern syscall_result<void> unlinkat(file dir, c_str path, unlink_flags flags);
diff --git a/unlink.cpp b/unlink.cpp
@@ -0,0 +1,7 @@
+#include "linux.hpp"
+
+int main(int argc, char* argv[])
+{
+ for (int i = 1; i < argc; ++i)
+ *unlinkat(AT_FDCWD, argv[i], {});
+}
diff --git a/x86_64.s b/x86_64.s
@@ -1,3 +1,5 @@
+# Syscall numbers https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/syscalls/#x86_64-64-bit
+
.intel_syntax noprefix
.global start
@@ -86,6 +88,10 @@ extern openat
extern_alias _Z6openat4file5c_strii
_syscall 257 syscall6
+extern unlinkat
+extern_alias _Z8unlinkat4file5c_str12unlink_flags
+_syscall 263 syscall3
+
extern renameat
extern_alias _Z9renameat24file5c_strS_S0_12rename_flags
_syscall 316 syscall6