X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fcompare.c;h=6a873d7b131949bbc05fcb9634e78f90179fef5f;hb=ecbcb7b6d74c2d69386c8d7e435486a4690c9993;hp=b74793fc7e07f203af6918add5b8d80b83c8242e;hpb=59146768ef4a2c045239628b7179ea477563d63f;p=chaz%2Ftar diff --git a/src/compare.c b/src/compare.c index b74793f..6a873d7 100644 --- a/src/compare.c +++ b/src/compare.c @@ -217,7 +217,14 @@ diff_file (void) } else { - diff_handle = open (file_name, open_read_flags); + int atime_flag = + (atime_preserve_option == system_atime_preserve + ? O_NOATIME + : 0); + + diff_handle = open (file_name, + (O_RDONLY | O_BINARY | O_CLOEXEC | O_NOCTTY + | O_NONBLOCK | atime_flag)); if (diff_handle < 0) { @@ -236,10 +243,8 @@ diff_file (void) if (atime_preserve_option == replace_atime_preserve) { - struct timespec ts[2]; - ts[0] = get_stat_atime (&stat_data); - ts[1] = get_stat_mtime (&stat_data); - if (set_file_atime (diff_handle, file_name, ts) != 0) + struct timespec atime = get_stat_atime (&stat_data); + if (set_file_atime (diff_handle, file_name, atime, 0) != 0) utime_error (file_name); } @@ -391,6 +396,10 @@ diff_multivol (void) struct stat stat_data; int fd, status; off_t offset; + int atime_flag = + (atime_preserve_option == system_atime_preserve + ? O_NOATIME + : 0); if (current_stat_info.had_trailing_slash) { @@ -416,7 +425,10 @@ diff_multivol (void) return; } - fd = open (current_stat_info.file_name, open_read_flags); + + fd = open (current_stat_info.file_name, + (O_RDONLY | O_BINARY | O_CLOEXEC | O_NOCTTY | O_NONBLOCK + | atime_flag)); if (fd < 0) {