mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-02-10 09:21:58 +02:00
copy: allow symlink timestamp preservation on more systems
* src/copy.c (utimens_symlink): Simplify by using lutimens. * m4/jm-macros.m4 (coreutils_MACROS): Drop utimensat; gnulib does this for us. * tests/cp/preserve-slink-time: Recognize lutimes support.
This commit is contained in:
@@ -89,9 +89,6 @@ AC_DEFUN([coreutils_MACROS],
|
||||
tcgetpgrp \
|
||||
)
|
||||
|
||||
# for cp.c
|
||||
AC_CHECK_FUNCS_ONCE([utimensat])
|
||||
|
||||
dnl This can't use AC_REQUIRE; I'm not quite sure why.
|
||||
cu_PREREQ_STAT_PROG
|
||||
|
||||
|
||||
10
src/copy.c
10
src/copy.c
@@ -123,20 +123,12 @@ static char const *top_level_dst_name;
|
||||
static inline int
|
||||
utimens_symlink (char const *file, struct timespec const *timespec)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
#if HAVE_UTIMENSAT
|
||||
err = utimensat (AT_FDCWD, file, timespec, AT_SYMLINK_NOFOLLOW);
|
||||
int err = lutimens (file, timespec);
|
||||
/* When configuring on a system with new headers and libraries, and
|
||||
running on one with a kernel that is old enough to lack the syscall,
|
||||
utimensat fails with ENOSYS. Ignore that. */
|
||||
if (err && errno == ENOSYS)
|
||||
err = 0;
|
||||
#else
|
||||
(void) file;
|
||||
(void) timespec;
|
||||
#endif
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ fi
|
||||
. $srcdir/test-lib.sh
|
||||
|
||||
grep '^#define HAVE_UTIMENSAT' "$CONFIG_HEADER" > /dev/null ||
|
||||
grep '^#define HAVE_LUTIMES' "$CONFIG_HEADER" > /dev/null ||
|
||||
skip_test_ 'this system lacks the utimensat function'
|
||||
|
||||
ln -s no-such dangle || framework_failure
|
||||
@@ -34,6 +35,7 @@ case $(stat --format=%y dangle) in
|
||||
??:??:??.000000000) sleep 2;;
|
||||
esac
|
||||
|
||||
# Can't use --format=%x, as lstat() modifies atime on some platforms.
|
||||
cp -Pp dangle d2 || framework_failure
|
||||
stat --format=%y dangle > t1 || framework_failure
|
||||
stat --format=%y d2 > t2 || framework_failure
|
||||
|
||||
Reference in New Issue
Block a user