aboutsummaryrefslogtreecommitdiffstats
path: root/src/sysdep.c
diff options
context:
space:
mode:
authorPaul Eggert2017-08-14 15:25:13 -0700
committerPaul Eggert2017-08-14 15:53:28 -0700
commit13a846823a92447d5cf0c2ce2bb401c5cdcb9ee4 (patch)
tree5c7f07e83772c76357fc56145ef8cd96ea4eb460 /src/sysdep.c
parent4fe9a9efcfdd39c5751d4506e94afaf28fcbcaef (diff)
downloademacs-13a846823a92447d5cf0c2ce2bb401c5cdcb9ee4.tar.gz
emacs-13a846823a92447d5cf0c2ce2bb401c5cdcb9ee4.zip
Improve rename-file behavior on macOS
Problem reported by Philipp Stephani (Bug#27986). * src/fileio.c (Frename_file): Worry about file name case sensitivity only if CYGWIN or DOS_NT. * src/sysdep.c (renameat_noreplace): Use renameatx_np on macOS, since this provides the necessary atomicity guarantees.
Diffstat (limited to 'src/sysdep.c')
-rw-r--r--src/sysdep.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/sysdep.c b/src/sysdep.c
index 35f499c1853..2e18a419e3f 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -2693,11 +2693,13 @@ renameat_noreplace (int srcfd, char const *src, int dstfd, char const *dst)
2693{ 2693{
2694#if defined SYS_renameat2 && defined RENAME_NOREPLACE 2694#if defined SYS_renameat2 && defined RENAME_NOREPLACE
2695 return syscall (SYS_renameat2, srcfd, src, dstfd, dst, RENAME_NOREPLACE); 2695 return syscall (SYS_renameat2, srcfd, src, dstfd, dst, RENAME_NOREPLACE);
2696#elif defined RENAME_EXCL
2697 return renameatx_np (srcfd, src, dstfd, dst, RENAME_EXCL);
2696#else 2698#else
2697#ifdef WINDOWSNT 2699# ifdef WINDOWSNT
2698 if (srcfd == AT_FDCWD && dstfd == AT_FDCWD) 2700 if (srcfd == AT_FDCWD && dstfd == AT_FDCWD)
2699 return sys_rename_replace (src, dst, 0); 2701 return sys_rename_replace (src, dst, 0);
2700#endif 2702# endif
2701 errno = ENOSYS; 2703 errno = ENOSYS;
2702 return -1; 2704 return -1;
2703#endif 2705#endif