X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fincremen.c;h=b2ab5bf0557e6331e9a612e010e5410cabe0dfdb;hb=49bd102a1b220a0e4ad3e0e75ac0cdd2a5964efa;hp=c6d4f4c5849a2ecdb5e9633a36e718c95e195f93;hpb=8da503cad6e883b30c05749149084d24319063b4;p=chaz%2Ftar diff --git a/src/incremen.c b/src/incremen.c index c6d4f4c..b2ab5bf 100644 --- a/src/incremen.c +++ b/src/incremen.c @@ -408,7 +408,7 @@ update_parent_directory (struct tar_stat_info *parent) if (directory) { struct stat st; - if (fstatat (parent->fd, ".", &st, fstatat_flags) != 0) + if (fstat (parent->fd, &st) != 0) stat_diag (directory->name); else directory->mtime = get_stat_mtime (&st); @@ -426,7 +426,6 @@ procdir (const char *name_buffer, struct tar_stat_info *st, { struct directory *directory; struct stat *stat_data = &st->stat; - dev_t device = st->parent ? st->parent->stat.st_dev : 0; bool nfs = NFS_FILE_STAT (*stat_data); if ((directory = find_directory (name_buffer)) != NULL) @@ -540,11 +539,8 @@ procdir (const char *name_buffer, struct tar_stat_info *st, } } - /* If the directory is on another device and --one-file-system was given, - omit it... */ - if (one_file_system_option && device != stat_data->st_dev - /* ... except if it was explicitely given in the command line */ - && !is_individual_file (name_buffer)) + if (one_file_system_option && st->parent + && stat_data->st_dev != st->parent->stat.st_dev) /* FIXME: WARNOPT (WARN_XDEV, (0, 0, @@ -783,8 +779,7 @@ scan_directory (struct tar_stat_info *st) namebuf_free (nbuf); - if (dirp) - free (dirp); + free (dirp); return directory; } @@ -890,7 +885,8 @@ append_incremental_renames (struct directory *dir) for (dp = dirhead; dp; dp = dp->next) store_rename (dp, &stk); - if (obstack_object_size (&stk) != size) + /* FIXME: Is this the right thing to do when DIR is null? */ + if (dir && obstack_object_size (&stk) != size) { obstack_1grow (&stk, 0); dumpdir_free (dir->dump); @@ -1351,8 +1347,7 @@ read_directory_file (void) if (ferror (listed_incremental_stream)) read_error (listed_incremental_option); - if (buf) - free (buf); + free (buf); } /* Output incremental data for the directory ENTRY to the file DATA. @@ -1663,11 +1658,10 @@ try_purge_directory (char const *directory_name) { const char *entry; struct stat st; - if (p) - free (p); + free (p); p = new_name (directory_name, cur); - if (deref_stat (false, p, &st)) + if (deref_stat (p, &st) != 0) { if (errno != ENOENT) /* FIXME: Maybe keep a list of renamed dirs and check it here? */