Port better to glibc 2.28+ renameat2
* 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.
This commit is contained in:
parent
0dddf9849e
commit
5a344d90c5
2 changed files with 5 additions and 3 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue