summaryrefslogtreecommitdiff
path: root/src/sysdep.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2017-08-14 15:25:13 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2017-08-14 15:53:28 -0700
commit13a846823a92447d5cf0c2ce2bb401c5cdcb9ee4 (patch)
tree5c7f07e83772c76357fc56145ef8cd96ea4eb460 /src/sysdep.c
parent4fe9a9efcfdd39c5751d4506e94afaf28fcbcaef (diff)
downloademacs-13a846823a92447d5cf0c2ce2bb401c5cdcb9ee4.tar.gz
emacs-13a846823a92447d5cf0c2ce2bb401c5cdcb9ee4.tar.bz2
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)
{
#if defined SYS_renameat2 && defined RENAME_NOREPLACE
return syscall (SYS_renameat2, srcfd, src, dstfd, dst, RENAME_NOREPLACE);
+#elif defined RENAME_EXCL
+ return renameatx_np (srcfd, src, dstfd, dst, RENAME_EXCL);
#else
-#ifdef WINDOWSNT
+# ifdef WINDOWSNT
if (srcfd == AT_FDCWD && dstfd == AT_FDCWD)
return sys_rename_replace (src, dst, 0);
-#endif
+# endif
errno = ENOSYS;
return -1;
#endif