summaryrefslogtreecommitdiff
path: root/src/create.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2011-03-07 15:40:32 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2011-03-07 15:40:56 -0800
commit881e5626c5db79d825a45ba15aecec9087bcd8b9 (patch)
tree9b7c5bf0692a5a3cecb23445d427be1141e0b41f /src/create.c
parent67ae04ba3177328695575fccf2f3614b9531c255 (diff)
downloadtar-881e5626c5db79d825a45ba15aecec9087bcd8b9.tar.gz
--atime-preserve=replace: fix correctness and performance bugs
reported by Eric Blake in <http://lists.gnu.org/archive/html/bug-tar/2011-03/msg00000.html>. * src/compare.c (diff_file): Do not restore atime of size-zero files. * src/create.c (dump_file0): Likewise. Also, do not restore atime when fd is zero, because that indicates a file we haven't opened.
Diffstat (limited to 'src/create.c')
-rw-r--r--src/create.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/create.c b/src/create.c
index e8de6b92..43b5a4c2 100644
--- a/src/create.c
+++ b/src/create.c
@@ -1797,6 +1797,7 @@ dump_file0 (struct tar_stat_info *st, char const *name, char const *p)
set_exit_status (TAREXIT_DIFFERS);
}
else if (atime_preserve_option == replace_atime_preserve
+ && fd && (is_dir || original_size != 0)
&& set_file_atime (fd, parentfd, name, st->atime) != 0)
utime_error (p);
}