+2006-10-21 Jim Meyering <jim@meyering.net>
+
+ Enable an fts optimization (call lstat only for directories,
+ on some file system types) also with the --preserve-root option
+ of chown or chgrp.
+ * src/chown-core.c (change_file_owner): Compare fts_statp-based
+ dev/ino against root dev/ino only for directories.
+ (chown_files): Don't let the root_dev_ino setting influence whether
+ we use FTS_NOSTAT: fts always sets *fts_statp for a directory.
+
2006-10-20 Jim Meyering <jim@meyering.net>
* src/od.c (usage): Change description of default to use "-w16",
|| required_gid == file_stats->st_gid));
}
- if (do_chown && ROOT_DEV_INO_CHECK (chopt->root_dev_ino, file_stats))
+ if (do_chown
+ /* With FTS_NOSTAT, file_stats is valid only for directories.
+ Don't need to check for FTS_D, since it is handled above,
+ and same for FTS_DNR, since then do_chown is false. */
+ && (ent->fts_info == FTS_DP || ent->fts_info == FTS_DC)
+ && ROOT_DEV_INO_CHECK (chopt->root_dev_ino, file_stats))
{
ROOT_DEV_INO_WARN (file_full_name);
ok = do_chown = false;
/* Use lstat and stat only if they're needed. */
int stat_flags = ((required_uid != (uid_t) -1 || required_gid != (gid_t) -1
|| chopt->affect_symlink_referent
- || chopt->verbosity != V_off || chopt->root_dev_ino)
+ || chopt->verbosity != V_off)
? 0
: FTS_NOSTAT);