From: Collin Funk Date: Sun, 19 Jan 2025 05:06:49 +0000 (-0800) Subject: renameatu: Work around a GNU/Hurd bug. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=dac52d1be1a45b8b2540d62b33feb924a7036e5c;p=gnulib.git renameatu: Work around a GNU/Hurd bug. * m4/renameat.m4 (gl_FUNC_RENAMEAT): Check if renameat2 handles trailing slashes. * doc/glibc-functions/renameat2.texi: Mention the GNU/Hurd bug. --- diff --git a/ChangeLog b/ChangeLog index c11ad91e2b..26cc55b97d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2025-01-18 Collin Funk + + renameatu: Work around a GNU/Hurd bug. + * m4/renameat.m4 (gl_FUNC_RENAMEAT): Check if renameat2 handles trailing + slashes. + * doc/glibc-functions/renameat2.texi: Mention the GNU/Hurd bug. + 2025-01-17 Paul Eggert alignasof: port to IBM XL C V16.1 diff --git a/doc/glibc-functions/renameat2.texi b/doc/glibc-functions/renameat2.texi index d3f8c4e8a3..5f281ee0a3 100644 --- a/doc/glibc-functions/renameat2.texi +++ b/doc/glibc-functions/renameat2.texi @@ -19,6 +19,12 @@ glibc 2.27, macOS 14, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, Minix 3.1.8, AIX 7 This function succeeds when the @code{RENAME_NOREPLACE} flag is specified and the source and destination are the same file, on some platforms: Cygwin 3.4.6. +@item +@code{renameat2 (AT_FDCWD, "file", AT_FDCWD, "new/" ...)} succeeds +instead of failing and setting @code{errno} to @code{ENOTDIR}, on some +platforms: +@c https://sourceware.org/bugzilla/show_bug.cgi?id=32570 +GNU/Hurd. @end itemize @mindex renameatu diff --git a/m4/renameat.m4 b/m4/renameat.m4 index f967ae1593..129e7fe067 100644 --- a/m4/renameat.m4 +++ b/m4/renameat.m4 @@ -1,5 +1,5 @@ # renameat.m4 -# serial 5 +# serial 6 dnl Copyright (C) 2009-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -29,17 +29,25 @@ AC_DEFUN([gl_FUNC_RENAMEAT], if test $ac_cv_func_renameat2 = yes; then AC_CACHE_CHECK([whether renameat2 works], [gl_cv_func_renameat2_works], - [AC_RUN_IFELSE( + [rm -rf conftest.a conftest.b + touch conftest.a + AC_RUN_IFELSE( [AC_LANG_SOURCE([[ + #include #include #include int main () { + int result = 0; /* This test fails on Cygwin 3.4.6. */ if (renameat2 (AT_FDCWD, "conftest.c", AT_FDCWD, "conftest.c", RENAME_NOREPLACE) == 0) - return 1; - return 0; + result |= 1; + /* This test fails on GNU/Hurd. */ + if (renameat2 (AT_FDCWD, "conftest.a", AT_FDCWD, "conftest.b/", 0) + == 0) + result |= 2; + return result; } ]])], [gl_cv_func_renameat2_works=yes], @@ -47,12 +55,15 @@ AC_DEFUN([gl_FUNC_RENAMEAT], [case "$host_os" in # Guess yes on Linux. linux*) gl_cv_func_renameat2_works="guessing yes" ;; + # Guess no on GNU/Hurd. + gnu*) gl_cv_func_renameat2_works="guessing no" ;; # Guess no on Cygwin. cygwin*) gl_cv_func_renameat2_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_renameat2_works="$gl_cross_guess_normal" ;; esac ]) + rm -rf conftest.a conftest.b ]) case "$gl_cv_func_renameat2_works" in *yes)