From: Jim Meyering Date: Sun, 31 Dec 2000 08:29:17 +0000 (+0000) Subject: Avoid an unnecessary `stat' when using --dereference. X-Git-Tag: FILEUTILS-4_0_36~141 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=769b95b7514a2e4bde8556495f1de793df0cc4bc;p=thirdparty%2Fcoreutils.git Avoid an unnecessary `stat' when using --dereference. (same_file_ok): Use stat only if lstat reported that the file was a symbolic link. --- diff --git a/src/copy.c b/src/copy.c index a875892ed3..f1d527cb18 100644 --- a/src/copy.c +++ b/src/copy.c @@ -512,9 +512,17 @@ same_file_ok (const char *src_path, const struct stat *src_sb, if (x->xstat == lstat) { - if (stat (dst_path, &tmp_dst_sb) - || stat (src_path, &tmp_src_sb) - || ! SAME_INODE (tmp_src_sb, tmp_dst_sb)) + if ( ! S_ISLNK (src_sb_link->st_mode)) + tmp_src_sb = *src_sb_link; + else if (stat (src_path, &tmp_src_sb)) + return 1; + + if ( ! S_ISLNK (dst_sb_link->st_mode)) + tmp_dst_sb = *dst_sb_link; + else if (stat (dst_path, &tmp_dst_sb)) + return 1; + + if ( ! SAME_INODE (tmp_src_sb, tmp_dst_sb)) return 1; /* FIXME: shouldn't this be testing whether we're making symlinks? */