diff options
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | src/copy.c | 15 |
2 files changed, 16 insertions, 5 deletions
@@ -2,6 +2,12 @@ GNU coreutils NEWS -*- outline -*- * Noteworthy changes in release ?.? (????-??-??) [?] +** Bug fixes + + cp, mv now ignore failure to preserve a symlink time stamp, when it is + due to their running on a kernel older than what was implied by headers + and libraries tested at configure time. + * Noteworthy changes in release 7.5 (2009-08-20) [stable] diff --git a/src/copy.c b/src/copy.c index bf9230bb0..b5cf64c6a 100644 --- a/src/copy.c +++ b/src/copy.c @@ -123,13 +123,18 @@ 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 - return utimensat (AT_FDCWD, file, timespec, AT_SYMLINK_NOFOLLOW); -#else - /* Don't set errno=ENOTSUP here as we don't want - to output an error message for this case. */ - return 0; + err = utimensat (AT_FDCWD, file, timespec, AT_SYMLINK_NOFOLLOW); + /* 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; #endif + + return err; } /* Perform the O(1) btrfs clone operation, if possible. |