From 881e5626c5db79d825a45ba15aecec9087bcd8b9 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 7 Mar 2011 15:40:32 -0800 Subject: [PATCH] --atime-preserve=replace: fix correctness and performance bugs reported by Eric Blake in . * 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. --- src/compare.c | 5 +++-- src/create.c | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/compare.c b/src/compare.c index 91ced57..273269a 100644 --- a/src/compare.c +++ b/src/compare.c @@ -234,7 +234,8 @@ diff_file (void) else read_and_process (¤t_stat_info, process_rawdata); - if (atime_preserve_option == replace_atime_preserve) + if (atime_preserve_option == replace_atime_preserve + && stat_data.st_size != 0) { struct timespec atime = get_stat_atime (&stat_data); if (set_file_atime (diff_handle, chdir_fd, file_name, atime) @@ -528,7 +529,7 @@ verify_volume (void) if (may_fail) WARN((0, 0, _("Verification may fail to locate original files."))); - + if (!diff_buffer) diff_init (); diff --git a/src/create.c b/src/create.c index e8de6b9..43b5a4c 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); } -- 2.44.0