? O_NOATIME
: 0);
- diff_handle = open (file_name, O_RDONLY | O_BINARY | atime_flag);
+ diff_handle = open (file_name,
+ (O_RDONLY | O_BINARY | O_CLOEXEC | O_NOCTTY
+ | O_NONBLOCK | atime_flag));
if (diff_handle < 0)
{
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);
}
dumpdir_cmp (const char *a, const char *b)
{
size_t len;
-
+
while (*a)
switch (*a)
{
a += len;
b += len;
break;
-
+
case 'D':
if (strcmp(a, b))
return 1;
a += len;
b += len;
break;
-
+
case 'R':
case 'T':
case 'X':
else
dev = stat_data.st_dev;
- dumpdir_buffer = directory_contents
- (scan_directory (current_stat_info.file_name, dev, false));
+ dumpdir_buffer = directory_contents (scan_directory (¤t_stat_info));
if (dumpdir_buffer)
{
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)
{
return;
}
- fd = open (current_stat_info.file_name, O_RDONLY | O_BINARY);
+
+ fd = open (current_stat_info.file_name,
+ (O_RDONLY | O_BINARY | O_CLOEXEC | O_NOCTTY | O_NONBLOCK
+ | atime_flag));
if (fd < 0)
{
flush_read ();
while (1)
{
- enum read_header status = read_header (¤t_header,
- ¤t_stat_info,
+ enum read_header status = read_header (¤t_header,
+ ¤t_stat_info,
read_header_auto);
if (status == HEADER_FAILURE)
{
char buf[UINTMAX_STRSIZE_BOUND];
- status = read_header (¤t_header, ¤t_stat_info,
+ status = read_header (¤t_header, ¤t_stat_info,
read_header_auto);
if (status == HEADER_ZERO_BLOCK)
break;
STRINGIFY_BIGINT (current_block_ordinal (), buf)));
}
}
-
+
diff_archive ();
tar_stat_destroy (¤t_stat_info);
}