summaryrefslogtreecommitdiff
path: root/src/linux
diff options
context:
space:
mode:
authorTony Ambardar <tony.ambardar@gmail.com>2024-05-06 20:28:32 -0700
committerRich Felker <dalias@aerifal.cx>2024-05-23 09:13:49 -0400
commit05ce67fea99ca09cd4b6625cff7aec9cc222dd5a (patch)
tree2cdba37f1d75c63e307feab1d067a809884370f2 /src/linux
parent007997299248b8682dcbb73595c53dfe86071c83 (diff)
downloadmusl-05ce67fea99ca09cd4b6625cff7aec9cc222dd5a.tar.gz
add renameat2 linux syscall wrapper
This syscall is available since Linux 3.15 and also implemented in glibc from version 2.28. It is commonly used in filesystem or security contexts. Constants RENAME_NOREPLACE, RENAME_EXCHANGE, RENAME_WHITEOUT are guarded by _GNU_SOURCE as with glibc.
Diffstat (limited to 'src/linux')
-rw-r--r--src/linux/renameat2.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/linux/renameat2.c b/src/linux/renameat2.c
new file mode 100644
index 00000000..b8060388
--- /dev/null
+++ b/src/linux/renameat2.c
@@ -0,0 +1,11 @@
+#define _GNU_SOURCE
+#include <stdio.h>
+#include "syscall.h"
+
+int renameat2(int oldfd, const char *old, int newfd, const char *new, unsigned flags)
+{
+#ifdef SYS_renameat
+ if (!flags) return syscall(SYS_renameat, oldfd, old, newfd, new);
+#endif
+ return syscall(SYS_renameat2, oldfd, old, newfd, new, flags);
+}