X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fcompare.c;h=204c5dc16dd38f204bea980e84bc4045e78387c5;hb=fc5e44c99c98d764463f21a12c2c3ef1f0ba8ac7;hp=b74793fc7e07f203af6918add5b8d80b83c8242e;hpb=de328a580ab6f5ff4a3237ce21f1ef0b7dd12984;p=chaz%2Ftar diff --git a/src/compare.c b/src/compare.c index b74793f..204c5dc 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,10 @@ 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, AT_FDCWD, file_name, + atime, 0) + != 0) utime_error (file_name); } @@ -391,6 +398,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 +427,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) {