diff options
author | Jim Meyering <meyering@redhat.com> | 2009-08-24 08:21:47 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2009-08-24 12:44:13 +0200 |
commit | 2bc0f3caaafeb240cdcfd050b7ad1fe0ad14addf (patch) | |
tree | cac10505aae58298cbff1fe2dfe69e9373b765a6 | |
parent | 831acb987e970ca86b72eb594965ff59bfedfd30 (diff) | |
download | coreutils-2bc0f3caaafeb240cdcfd050b7ad1fe0ad14addf.tar.xz |
cp: ignore obscure failure to preserve symlink time stamps,
...when run on a kernel older than what was implied by headers and
libraries tested at configure time.
* src/copy.c (utimens_symlink): Ignore failure when errno == ENOSYS.
* NEWS (Bug fixes): Mention it.
Reported by Todd Zullinger and Kamil Dudka.
Details in this thread:
http://thread.gmane.org/gmane.linux.redhat.fedora.devel/119834
-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. |