[klibc] [klibc:master] rename, renameat: Use renameat2() system call

klibc-bot for Ben Hutchings ben at decadent.org.uk
Fri Jan 18 08:42:12 PST 2019


Commit-ID:  ebdc262bd8a4d650c58de48f67e6b08aeb953a8f
Gitweb:     http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=ebdc262bd8a4d650c58de48f67e6b08aeb953a8f
Author:     Ben Hutchings <ben at decadent.org.uk>
AuthorDate: Mon, 16 Jul 2018 18:24:08 +0100
Committer:  Ben Hutchings <ben at decadent.org.uk>
CommitDate: Fri, 18 Jan 2019 03:10:14 +0000

[klibc] rename, renameat: Use renameat2() system call

New architectures only define the renameat2() system call, which was
added in Linux 3.15.  Define rename() and renameat() as wrappers for
it if necessary.

Link: https://www.zytor.com/pipermail/klibc/2018-July/003996.html
Signed-off-by: Ben Hutchings <ben at decadent.org.uk>

---
 usr/include/stdio.h    |  1 +
 usr/klibc/Kbuild       |  3 ++-
 usr/klibc/SYSCALLS.def |  1 +
 usr/klibc/rename.c     |  2 +-
 usr/klibc/renameat.c   | 12 ++++++++++++
 5 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/usr/include/stdio.h b/usr/include/stdio.h
index 21243cc..1d45fe1 100644
--- a/usr/include/stdio.h
+++ b/usr/include/stdio.h
@@ -79,6 +79,7 @@ __extern void perror(const char *);
 
 __extern int rename(const char *, const char *);
 __extern int renameat(int, const char *, int, const char *);
+__extern int renameat2(int, const char *, int, const char *, unsigned int);
 
 __extern int remove(const char *);
 
diff --git a/usr/klibc/Kbuild b/usr/klibc/Kbuild
index eba6add..b19f3ab 100644
--- a/usr/klibc/Kbuild
+++ b/usr/klibc/Kbuild
@@ -59,7 +59,8 @@ klib-y += vsnprintf.o snprintf.o vsprintf.o sprintf.o \
 	  inet/inet_ntoa.o inet/inet_aton.o inet/inet_addr.o \
 	  inet/inet_ntop.o inet/inet_pton.o inet/bindresvport.o \
 	  accept.o send.o recv.o \
-	  access.o chmod.o chown.o dup2.o mknod.o poll.o rename.o stat.o \
+	  access.o chmod.o chown.o dup2.o mknod.o poll.o rename.o renameat.o \
+	  stat.o \
 	  lchown.o link.o rmdir.o unlink.o utimes.o lstat.o mkdir.o \
 	  readlink.o realpath.o select.o symlink.o pipe.o \
 	  ctype/isalnum.o ctype/isalpha.o ctype/isascii.o \
diff --git a/usr/klibc/SYSCALLS.def b/usr/klibc/SYSCALLS.def
index c56e8f9..64d7b0c 100644
--- a/usr/klibc/SYSCALLS.def
+++ b/usr/klibc/SYSCALLS.def
@@ -116,6 +116,7 @@ int chdir(const char *);
 int fchdir(int);
 <?> int rename(const char *, const char *);
 <?> int renameat(int, const char *, int, const char *);
+<?> int renameat2(int, const char *, int, const char *, unsigned int);
 <?> int mknod(const char *, mode_t, dev_t);
 <?> int mknodat(int, const char *, mode_t, dev_t);
 <?> int chmod(const char *, mode_t);
diff --git a/usr/klibc/rename.c b/usr/klibc/rename.c
index 587c26f..d76b739 100644
--- a/usr/klibc/rename.c
+++ b/usr/klibc/rename.c
@@ -5,7 +5,7 @@
 
 int rename(const char *oldpath, const char *newpath)
 {
-	return renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath);
+	return renameat2(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0);
 }
 
 #endif /* __NR_rename */
diff --git a/usr/klibc/renameat.c b/usr/klibc/renameat.c
new file mode 100644
index 0000000..10c8882
--- /dev/null
+++ b/usr/klibc/renameat.c
@@ -0,0 +1,12 @@
+#include <fcntl.h>
+#include <stdio.h>
+
+#ifndef __NR_renameat
+
+int renameat(int olddirfd, const char *oldpath,
+	     int newdirfd, const char *newpath)
+{
+	return renameat2(olddirfd, oldpath, newdirfd, newpath, 0);
+}
+
+#endif /* __NR_renameat */


More information about the klibc mailing list