From 769b95b7514a2e4bde8556495f1de793df0cc4bc Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sun, 31 Dec 2000 08:29:17 +0000 Subject: Avoid an unnecessary `stat' when using --dereference. (same_file_ok): Use stat only if lstat reported that the file was a symbolic link. --- src/copy.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/copy.c') diff --git a/src/copy.c b/src/copy.c index a875892ed..f1d527cb1 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? */ -- cgit v1.2.3-54-g00ecf