]> git.eshelyaron.com Git - emacs.git/commitdiff
Port better to glibc 2.28+ renameat2
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 18 Dec 2022 05:40:02 +0000 (21:40 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 18 Dec 2022 06:38:58 +0000 (22:38 -0800)
* configure.ac: Check for renameat2.
* src/sysdep.c (renameat_noreplace): Prefer renameat2 (supplied by
glibc 2.28 and later) to doing the syscall by hand.

configure.ac
src/sysdep.c

index 6e37d56d31657c2d8729299cf5e6f0b35adbadd8..67c393e3351b509c1476ea5d526705d8344e3cf2 100644 (file)
@@ -4997,6 +4997,7 @@ pthread_sigmask strsignal setitimer \
 sendto recvfrom getsockname getifaddrs freeifaddrs \
 gai_strerror sync \
 getpwent endpwent getgrent endgrent \
+renameat2 \
 cfmakeraw cfsetspeed __executable_start log2 pthread_setname_np \
 pthread_set_name_np])
 LIBS=$OLD_LIBS
index 736723bdf3dc8bd98fc5abc934fd3901e0f9fb92..8402ffe308ce132fb40f71bef7108be433d2a2f1 100644 (file)
@@ -2653,10 +2653,11 @@ emacs_perror (char const *message)
 int
 renameat_noreplace (int srcfd, char const *src, int dstfd, char const *dst)
 {
-#if defined SYS_renameat2 && defined RENAME_NOREPLACE
-  return syscall (SYS_renameat2, srcfd, src, dstfd, dst, RENAME_NOREPLACE);
-#elif defined CYGWIN && defined RENAME_NOREPLACE
+#if HAVE_RENAMEAT2 && defined RENAME_NOREPLACE
   return renameat2 (srcfd, src, dstfd, dst, RENAME_NOREPLACE);
+#elif defined SYS_renameat2 && defined RENAME_NOREPLACE
+  /* Linux kernel 3.15 (2014) or later, with glibc 2.27 (2018) or earlier.  */
+  return syscall (SYS_renameat2, srcfd, src, dstfd, dst, RENAME_NOREPLACE);
 #elif defined RENAME_EXCL
   return renameatx_np (srcfd, src, dstfd, dst, RENAME_EXCL);
 #else