util: fall back in rename_noreplace when renameat2 isn't implemented
authorRichard Maw <richard.maw@codethink.co.uk>
Thu, 2 Jul 2015 13:04:34 +0000 (13:04 +0000)
committerRichard Maw <richard.maw@codethink.co.uk>
Thu, 2 Jul 2015 13:47:04 +0000 (14:47 +0100)
According to README we only need 3.7, and while it may also make sense
to bump that requirement when appropriate, it's trivial to fall back
when renameat2 is not available.

src/basic/util.c

index 727be56..a574c9c 100644 (file)
@@ -5925,10 +5925,9 @@ int rename_noreplace(int olddirfd, const char *oldpath, int newdirfd, const char
         if (ret >= 0)
                 return 0;
 
-        /* Even though renameat2() exists since Linux 3.15, btrfs added
-         * support for it later. If it is not implemented, fallback to another
-         * method. */
-        if (errno != EINVAL)
+        /* renameat2() exists since Linux 3.15, btrfs added support for it later.
+         * If it is not implemented, fallback to another method. */
+        if (!IN_SET(errno, EINVAL, ENOSYS))
                 return -errno;
 
         /* The link()/unlink() fallback does not work on directories. But