X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fcompare.c;h=6b7e6d8747053bebfef98bcf27707ba9d3b1d489;hb=c520964e849f2c42e8df50f9bd715248554fd8b7;hp=b74793fc7e07f203af6918add5b8d80b83c8242e;hpb=de328a580ab6f5ff4a3237ce21f1ef0b7dd12984;p=chaz%2Ftar diff --git a/src/compare.c b/src/compare.c index b74793f..6b7e6d8 100644 --- a/src/compare.c +++ b/src/compare.c @@ -151,7 +151,7 @@ read_and_process (struct tar_stat_info *st, int (*processor) (size_t, char *)) static int get_stat_data (char const *file_name, struct stat *stat_data) { - int status = deref_stat (dereference_option, file_name, stat_data); + int status = deref_stat (file_name, stat_data); if (status != 0) { @@ -217,7 +217,7 @@ diff_file (void) } else { - diff_handle = open (file_name, open_read_flags); + diff_handle = openat (chdir_fd, file_name, open_read_flags); if (diff_handle < 0) { @@ -236,10 +236,9 @@ 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, chdir_fd, file_name, atime) + != 0) utime_error (file_name); } @@ -272,7 +271,8 @@ diff_symlink (void) size_t len = strlen (current_stat_info.link_name); char *linkbuf = alloca (len + 1); - int status = readlink (current_stat_info.file_name, linkbuf, len + 1); + int status = readlinkat (chdir_fd, current_stat_info.file_name, + linkbuf, len + 1); if (status < 0) { @@ -364,7 +364,7 @@ diff_dumpdir (void) dev_t dev = 0; struct stat stat_data; - if (deref_stat (true, current_stat_info.file_name, &stat_data)) + if (deref_stat (current_stat_info.file_name, &stat_data) != 0) { if (errno == ENOENT) stat_warn (current_stat_info.file_name); @@ -416,7 +416,8 @@ diff_multivol (void) return; } - fd = open (current_stat_info.file_name, open_read_flags); + + fd = openat (chdir_fd, current_stat_info.file_name, open_read_flags); if (fd < 0) {