From: Bruno Haible Date: Thu, 14 Aug 2025 20:23:29 +0000 (+0200) Subject: renameatu: Use issymlinkat. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8b1b1628b43985a99c3e65f43525732a8a0a26e;p=thirdparty%2Fgnulib.git renameatu: Use issymlinkat. * lib/renameatu.c (renameatu): Use issymlinkat instead of readlinkat. * modules/renameatu (Depends-on): Remove readlinkat. Add issymlinkat. --- diff --git a/ChangeLog b/ChangeLog index 6c6875f353..d0d03f92ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2025-08-14 Bruno Haible + + renameatu: Use issymlinkat. + * lib/renameatu.c (renameatu): Use issymlinkat instead of readlinkat. + * modules/renameatu (Depends-on): Remove readlinkat. Add issymlinkat. + 2025-08-14 Bruno Haible rename: Use issymlink. diff --git a/lib/renameatu.c b/lib/renameatu.c index 725e031abc..64a7f5285a 100644 --- a/lib/renameatu.c +++ b/lib/renameatu.c @@ -204,17 +204,14 @@ renameatu (int fd1, char const *src, int fd2, char const *dst, goto out; } strip_trailing_slashes (src_temp); - char linkbuf[1]; - if (readlinkat (fd1, src_temp, linkbuf, sizeof linkbuf) < 0) + int ret = issymlinkat (fd1, src_temp); + if (ret > 0) + goto out; + if (ret < 0) { - if (errno != EINVAL) - { - rename_errno = errno; - goto out; - } + rename_errno = errno; + goto out; } - else - goto out; } if (dst_slash) { @@ -225,17 +222,14 @@ renameatu (int fd1, char const *src, int fd2, char const *dst, goto out; } strip_trailing_slashes (dst_temp); - char linkbuf[1]; - if (readlinkat (fd2, dst_temp, linkbuf, sizeof linkbuf) < 0) + int ret = issymlinkat (fd2, dst_temp); + if (ret > 0) + goto out; + if (ret < 0 && errno != ENOENT) { - if (errno != ENOENT && errno != EINVAL) - { - rename_errno = errno; - goto out; - } + rename_errno = errno; + goto out; } - else - goto out; } # endif /* RENAME_TRAILING_SLASH_SOURCE_BUG */ diff --git a/modules/renameatu b/modules/renameatu index 2947159adb..f4f12acd13 100644 --- a/modules/renameatu +++ b/modules/renameatu @@ -14,7 +14,7 @@ fcntl-h filenamecat-lgpl [test $HAVE_RENAMEAT = 0 || test $REPLACE_RENAMEAT = 1] openat-h [test $HAVE_RENAMEAT = 0 || test $REPLACE_RENAMEAT = 1] fstatat [test $REPLACE_RENAMEAT = 1] -readlinkat [test $REPLACE_RENAMEAT = 1] +issymlinkat [test $REPLACE_RENAMEAT = 1] bool [test $REPLACE_RENAMEAT = 1] at-internal [test $HAVE_RENAMEAT = 0] filename [test $HAVE_RENAMEAT = 0]