>From 32e683687be271ba3589021722b14e54e8b41d08 Mon Sep 17 00:00:00 2001 From: Andreas Henriksson Date: Sat, 6 Oct 2018 20:25:24 +0200 Subject: [PATCH] renameatu: Use renameat2 when available Use the function call rather than direct syscall when possible. The renameat2 function is provided since glibc 2.28. See: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32796 --- lib/renameatu.c | 5 ++++- m4/renameat.m4 | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/renameatu.c b/lib/renameatu.c index b013ad697..8a32417bf 100644 --- a/lib/renameatu.c +++ b/lib/renameatu.c @@ -80,7 +80,10 @@ renameatu (int fd1, char const *src, int fd2, char const *dst, int ret_val = -1; int err = EINVAL; -#ifdef SYS_renameat2 +#ifdef HAVE_RENAMEAT2 + ret_val = renameat2(fd1, src, fd2, dst, flags); + err = errno; +#elif defined SYS_renameat2 ret_val = syscall (SYS_renameat2, fd1, src, fd2, dst, flags); err = errno; #elif defined RENAME_EXCL diff --git a/m4/renameat.m4 b/m4/renameat.m4 index 116750785..df6f1fd5a 100644 --- a/m4/renameat.m4 +++ b/m4/renameat.m4 @@ -16,6 +16,7 @@ AC_DEFUN([gl_FUNC_RENAMEAT], AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS([linux/fs.h]) AC_CHECK_FUNCS_ONCE([renameat]) + AC_CHECK_FUNCS_ONCE([renameat2]) if test $ac_cv_func_renameat = no; then HAVE_RENAMEAT=0 elif test $REPLACE_RENAME = 1; then -- 2.19.0