From ac087d499842f3645586714061d4a3d660642541 Mon Sep 17 00:00:00 2001
From: =?utf8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
Date: Tue, 2 Apr 2024 13:21:41 +0100
Subject: [PATCH] renameatu: handle ENOSYS from renameatx_np

* lib/renameatu.c(): Fall back to renameat() when
renameatx_np(RENAME_EXCL) returns "Function not implemented".
This issue was seen with macFUSE.
Reported at https://github.com/coreutils/coreutils/issues/79
---
 ChangeLog       | 7 +++++++
 lib/renameatu.c | 2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index f7dcb49f08..c6ccc0f737 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2024-04-02  Pádraig Brady  <P@draigBrady.com>
+
+	renameatu: handle ENOSYS from renameatx_np
+	* lib/renameatu.c(): Fall back to renameat() without RENAME_EXCL
+	if "Function not implemented" is returned.  This was seen with macFUSE.
+	Reported at https://github.com/coreutils/coreutils/issues/79
+
 2024-04-02  Collin Funk  <collin.funk1@gmail.com>
 
 	gnulib-tool.py: Accept valid make syntax for escaped newlines.
diff --git a/lib/renameatu.c b/lib/renameatu.c
index 6893232516..815e3e0da9 100644
--- a/lib/renameatu.c
+++ b/lib/renameatu.c
@@ -78,7 +78,7 @@ renameat2ish (int fd1, char const *src, int fd2, char const *dst,
   if (flags)
     {
       int r = renameatx_np (fd1, src, fd2, dst, RENAME_EXCL);
-      if (r == 0 || errno != ENOTSUP)
+      if (r == 0 || (errno != ENOTSUP && errno != ENOSYS))
         return r;
     }
 # endif
-- 
2.43.0