<pre style='margin:0'>
Mihai Moldovan (Ionic) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/61f1b0d17c631cfd25220ddb283b28a51df49927">https://github.com/macports/macports-ports/commit/61f1b0d17c631cfd25220ddb283b28a51df49927</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 61f1b0d  sysutils/coreutils: add renameat gnulib module.
</span>61f1b0d is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 61f1b0d17c631cfd25220ddb283b28a51df49927
</span>Author: Mihai Moldovan <ionic@ionic.de>
AuthorDate: Fri Mar 10 21:16:46 2017 +0100

<span style='display:block; white-space:pre;color:#404040;'>    sysutils/coreutils: add renameat gnulib module.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fixes: https://trac.macports.org/ticket/53764
</span>---
 sysutils/coreutils/Portfile                        |  17 +++
 .../files/patch-lib_gnulib.mk-add-renameat.c.diff  |  27 ++++
 .../patch-m4_gnulib-comp.m4-add-renameat.diff      |  41 ++++++
 sysutils/coreutils/files/renameat.c                | 157 +++++++++++++++++++++
 sysutils/coreutils/files/renameat.m4               |  24 ++++
 5 files changed, 266 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/coreutils/Portfile b/sysutils/coreutils/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 74bcb4e..789b924 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/sysutils/coreutils/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/coreutils/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -42,6 +42,23 @@ configure.env-append    FORCE_UNSAFE_CONFIGURE=1
</span> # help2man: can't get `--help' info from man/hostid.td/hostid
 use_parallel_build  no
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+platform darwin {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${os.major} < 14} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        use_autoreconf          yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        autoreconf.args         -fvi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_build-append    port:texinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            xinstall -m 0644 -W "${filespath}" renameat.c "${worksrcpath}/lib/"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            xinstall -m 0644 -W "${filespath}" renameat.m4 "${worksrcpath}/m4/"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append       patch-m4_gnulib-comp.m4-add-renameat.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                patch-lib_gnulib.mk-add-renameat.c.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> post-destroot {
     if {[file exists ${destroot}${prefix}/share/info/dir]} {
         delete ${destroot}${prefix}/share/info/dir
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/coreutils/files/patch-lib_gnulib.mk-add-renameat.c.diff b/sysutils/coreutils/files/patch-lib_gnulib.mk-add-renameat.c.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..57f6d4a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/coreutils/files/patch-lib_gnulib.mk-add-renameat.c.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,27 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- lib/gnulib.mk.orig     2017-03-10 19:52:08.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ lib/gnulib.mk  2017-03-10 19:52:27.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -21,7 +21,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # the same distribution terms as the rest of that program.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Generated by gnulib-tool.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# Reproduce by: gnulib-tool --import --local-dir=gl --lib=libcoreutils --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=gnulib-tests --aux-dir=build-aux --with-tests --avoid=canonicalize-lgpl --avoid=dummy --makefile-name=gnulib.mk --no-conditional-dependencies --no-libtool --macro-prefix=gl acl alignof alloca announce-gen areadlink-with-size argmatch argv-iter assert autobuild backupfile base32 base64 buffer-lcm c-strcase c-strtod c-strtold calloc-gnu canon-host canonicalize  [...]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# Reproduce by: gnulib-tool --import --local-dir=gl --lib=libcoreutils --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=gnulib-tests --aux-dir=build-aux --with-tests --avoid=canonicalize-lgpl --avoid=dummy --makefile-name=gnulib.mk --no-conditional-dependencies --no-libtool --macro-prefix=gl acl alignof alloca announce-gen areadlink-with-size argmatch argv-iter assert autobuild backupfile base32 base64 buffer-lcm c-strcase c-strtod c-strtold calloc-gnu canon-host canonicalize  [...]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ MOSTLYCLEANFILES += lib/core lib/*.stackdump
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3177,6 +3177,15 @@ EXTRA_lib_libcoreutils_a_SOURCES += lib/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ## end   gnulib module rename
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++## begin gnulib module renameat
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++EXTRA_DIST += lib/renameat.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++EXTRA_lib_libcoreutils_a_SOURCES += lib/renameat.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++## end   gnulib module renameat
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ## begin gnulib module rewinddir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/coreutils/files/patch-m4_gnulib-comp.m4-add-renameat.diff b/sysutils/coreutils/files/patch-m4_gnulib-comp.m4-add-renameat.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..a667765
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/coreutils/files/patch-m4_gnulib-comp.m4-add-renameat.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,41 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- m4/gnulib-comp.m4.orig 2017-03-10 20:56:48.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ m4/gnulib-comp.m4      2017-03-10 20:56:16.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -544,6 +544,7 @@ AC_DEFUN([gl_EARLY],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   # Code from module remove-tests:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   # Code from module rename:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   # Code from module rename-tests:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  # Code from module renameat:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   # Code from module rewinddir:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   # Code from module rmdir:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   # Code from module rmdir-tests:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1649,6 +1650,14 @@ AC_DEFUN([gl_INIT],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     AC_LIBOBJ([rename])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   gl_STDIO_MODULE_INDICATOR([rename])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  gl_FUNC_RENAMEAT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if test $HAVE_RENAMEAT = 0 || test $REPLACE_RENAMEAT = 1; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    AC_LIBOBJ([renameat])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if test $HAVE_RENAMEAT = 0; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    AC_LIBOBJ([at-func2])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  gl_STDIO_MODULE_INDICATOR([renameat])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   gl_FUNC_REWINDDIR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if test $HAVE_REWINDDIR = 0; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     AC_LIBOBJ([rewinddir])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2811,6 +2820,7 @@ AC_DEFUN([gl_FILE_LIST], [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   lib/regexec.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   lib/remove.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   lib/rename.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  lib/renameat.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   lib/rewinddir.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   lib/rmdir.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   lib/root-dev-ino.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3296,6 +3306,7 @@ AC_DEFUN([gl_FILE_LIST], [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   m4/regex.m4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   m4/remove.m4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   m4/rename.m4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  m4/renameat.m4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   m4/rewinddir.m4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   m4/rmdir.m4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   m4/rpmatch.m4
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/coreutils/files/renameat.c b/sysutils/coreutils/files/renameat.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..22151c2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/coreutils/files/renameat.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,157 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Rename a file relative to open directories.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Copyright (C) 2009-2017 Free Software Foundation, Inc.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   This program is free software: you can redistribute it and/or modify
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   it under the terms of the GNU General Public License as published by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   the Free Software Foundation; either version 3 of the License, or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   (at your option) any later version.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   This program is distributed in the hope that it will be useful,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   but WITHOUT ANY WARRANTY; without even the implied warranty of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   GNU General Public License for more details.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   You should have received a copy of the GNU General Public License
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* written by Eric Blake */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <config.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if HAVE_RENAMEAT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# include <errno.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# include <stdbool.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# include <string.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# include "dirname.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# include "openat.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# undef renameat
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* renameat does not honor trailing / on Solaris 10.  Solve it in a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   similar manner to rename.  No need to worry about bugs not present
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   on Solaris, since all other systems either lack renameat or honor
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   trailing slash correctly.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+rpl_renameat (int fd1, char const *src, int fd2, char const *dst)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  size_t src_len = strlen (src);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  size_t dst_len = strlen (dst);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  char *src_temp = (char *) src;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  char *dst_temp = (char *) dst;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  bool src_slash;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  bool dst_slash;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  int ret_val = -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  int rename_errno = ENOTDIR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  struct stat src_st;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  struct stat dst_st;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  /* Let strace see any ENOENT failure.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (!src_len || !dst_len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return renameat (fd1, src, fd2, dst);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  src_slash = src[src_len - 1] == '/';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  dst_slash = dst[dst_len - 1] == '/';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (!src_slash && !dst_slash)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return renameat (fd1, src, fd2, dst);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  /* Presence of a trailing slash requires directory semantics.  If
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     the source does not exist, or if the destination cannot be turned
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     into a directory, give up now.  Otherwise, strip trailing slashes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     before calling rename.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (lstatat (fd1, src, &src_st))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (lstatat (fd2, dst, &dst_st))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      if (errno != ENOENT || !S_ISDIR (src_st.st_mode))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  else if (!S_ISDIR (dst_st.st_mode))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      errno = ENOTDIR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  else if (!S_ISDIR (src_st.st_mode))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      errno = EISDIR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# if RENAME_TRAILING_SLASH_SOURCE_BUG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  /* See the lengthy comment in rename.c why Solaris 9 is forced to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     GNU behavior, while Solaris 10 is left with POSIX behavior,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     regarding symlinks with trailing slash.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (src_slash)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      src_temp = strdup (src);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      if (!src_temp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          /* Rather than rely on strdup-posix, we set errno ourselves.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          rename_errno = ENOMEM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          goto out;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      strip_trailing_slashes (src_temp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      if (lstatat (fd1, src_temp, &src_st))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          rename_errno = errno;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          goto out;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      if (S_ISLNK (src_st.st_mode))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        goto out;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (dst_slash)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      dst_temp = strdup (dst);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      if (!dst_temp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          rename_errno = ENOMEM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          goto out;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      strip_trailing_slashes (dst_temp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      if (lstatat (fd2, dst_temp, &dst_st))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          if (errno != ENOENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              rename_errno = errno;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              goto out;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      else if (S_ISLNK (dst_st.st_mode))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        goto out;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# endif /* RENAME_TRAILING_SLASH_SOURCE_BUG */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  ret_val = renameat (fd1, src_temp, fd2, dst_temp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  rename_errno = errno;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ out:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (src_temp != src)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    free (src_temp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (dst_temp != dst)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    free (dst_temp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  errno = rename_errno;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return ret_val;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else /* !HAVE_RENAMEAT */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# include "openat-priv.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Rename FILE1, in the directory open on descriptor FD1, to FILE2, in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   the directory open on descriptor FD2.  If possible, do it without
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   changing the working directory.  Otherwise, resort to using
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   save_cwd/fchdir, then rename/restore_cwd.  If either the save_cwd or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   the restore_cwd fails, then give a diagnostic and exit nonzero.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+renameat (int fd1, char const *file1, int fd2, char const *file2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return at_func2 (fd1, file1, fd2, file2, rename);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* !HAVE_RENAMEAT */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/coreutils/files/renameat.m4 b/sysutils/coreutils/files/renameat.m4
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..cfbfe15
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/coreutils/files/renameat.m4
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,24 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# serial 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# See if we need to provide renameat replacement.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+dnl Copyright (C) 2009-2017 Free Software Foundation, Inc.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+dnl This file is free software; the Free Software Foundation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+dnl gives unlimited permission to copy and/or distribute it,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+dnl with or without modifications, as long as this notice is preserved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Written by Eric Blake.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+AC_DEFUN([gl_FUNC_RENAMEAT],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+[
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  AC_REQUIRE([gl_FUNC_OPENAT])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  AC_REQUIRE([gl_FUNC_RENAME])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  AC_CHECK_FUNCS_ONCE([renameat])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if test $ac_cv_func_renameat = no; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    HAVE_RENAMEAT=0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  elif test $REPLACE_RENAME = 1; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    dnl Solaris 9 and 10 have the same bugs in renameat as in rename.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    REPLACE_RENAMEAT=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+])
</span></pre><pre style='margin:0'>

</pre>