klibc-bot for Ben Hutchings
2019-Jan-18 16:42 UTC
[klibc] [klibc:master] rename, renameat: Use renameat2() system call
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 */